Are you using any framework (like Prism or Unity)? What are your experiences with them and are they mature enough to use in production apps?
I would like to create a complete list of all frameworks:
Prism (Guidance, MVVM)
Unity (DI/IoC)
Enterprise Library 5.0 Silverlight Integration Pack (Validation, Logging, Exception Handling, Caching, Interception, flexible config)
Ninject (DI/IoC)
.NET RIA Services (Data)
MEF (Extensibility)
MVVM Light Toolkit (UI Patterns)
Caliburn (UI Patterns)
Silverlight Extensions (Controls/UI Patterns)
Silverlight Toolkit (Controls)
Silverlight Contrib (Controls)
Silverlight Unit Test Framework (Unit Test)
nRoute Framework (Application Flow)
Clog (Logging)
Rhino Mocks (Mocking)
Farseer Physics Engine
IronRuby and IronPython (Dynamic languages in SL)
DeepEarth (Mapping)
.NET Image Tools (Image manipulation)
Kit3D (Graphics)
Update:
I've added a few to the list. I try to keep the list up-to-date with information from other sources.
Farseer Physics Engine : An easy to use 2D physics engine designed for Microsoft’s Silverlight platform. The Farseer Physics Engine focuses on simplicity, useful features, and enabling the creation of fun, dynamic games.
IronRuby and IronPython in Silverlight : The dynamic languages and Silverlight integration let you write browser applications with dynamic languages, like Ruby and Python. Please visit IronRuby or IronPython's websites' for using them in Silverlight.
DeepEarth: An open source, standards oriented Silverlight mapping framework. It provides a rich framework for integrating and visualising spatial layers, services and data.
Silverlight Contrib : Silverlight Contrib is a collection of Silverlight Controls and API enhancements, and productivity tools built for and by the Silverlight developer community.
.NET Image Tools : ImageTools for Silverlight is a library, which provides additional functionality for loading, saving and manipulation images from different sources and with different formats.
Kit3D : A 3D C# graphics engine for Microsoft Silverlight.
There are also:
Silverlight Toolkit
Ninject for Silverlight
I've been using Ninject for a little while now and it's my favorite DI/IoC framework.
Also, note that SilverlightContrib has merged with SilverlightExtensions a while ago. I'm kind of afraid though to see no updates since then.
Just today I found Gestalt which looks interesting. I'm not sure if it's a 'framework'.
Also added the Silverlight Integration Pack for Enterprise Library 5.0 from Microsoft patterns & practices, the same team that brought you Unity and Prism. Supports data caching (in-memory and isolated storage), logging (client and remote service), validation, exception handling and interception with flexibel configuration options (via external config, attributes or fluent interface).
Related
I am a naive developer and I am building up my concepts, I was asked to create a sample application in wcf, and so I am asking a bit subjective question here.
I want to know the diffrence and functionality of the above two, in which terms we prefer one over other?
WCF = Windows COMMUNICATION Foundation
WPF = Windows PRESENTATION Foundation.
WCF deals with communication (in simple terms - sending and receiving data as well as formatting and serialization involved), WPF deals with presentation (UI)
The quick answer is: Windows Presentation Foundation (WPF) is basically a way of displaying user interface. (see this)
Windows Communication Foundation (WCF) is a framework for creating service oriented applications. (see this)
As for which one you should use, it depends on your requirement. Usually an application written in WPF, ASP.NET..etc called the WCF service to do some processing at the server-side and the service returns the result to the application that called it.
Windows Presentation Foundation (WPF)
Next-Generation User Experiences. The Windows Presentation Foundation, WPF, provides a unified framework for building applications and high-fidelity experiences in Windows Vista that blend application UI, documents, and media content. WPF offers developers 2D and 3D graphics support, hardware-accelerated effects, scalability to different form factors, interactive data visualization, and superior content readability.
Windows Communication Foundation (WCF)
Windows Communication Foundation (WCF) is Microsoft’s unified programming model for building service-oriented applications. It enables developers to build secure, reliable, transacted solutions that integrate across platforms and interoperate with existing investments.
WPF is your FrontEnd (presentation: .htm, .xaml & .css, ..)
WCF is your BackEnd app (services that involve server connections to acquire data for you to deliver to the FrontEnd to present). You can write WCF for RESTful model.
WebAPI is for building services of RESTful model for 4.+ frameworks.
Basically, if you are developing a client- server application. You may use WCF -> in order to make connection between client and server, WPF -> as client side to present the data.
WCF = Windows Communication Foundation is used to build service-oriented applications.
WPF = Windows Presentation Foundation is used to write platform-independent applications.
Windows communication Fundation(WCF) is used for connecting different applications and passing the data's between them using endpoints.
Windows Presentation Foundation is used for designing rich internet applications in the format of xaml.
I am creating a draft architecture outline for a disconnected client-server platform, that involves multiple different client types. I need to support: web clients, desktop workstations and mobile devices (WM 6.x now and Android later).
I am searching for a MVP or MVVM based framework that would let me to reuse as much of the code and architecture as possible between clients, while:
using WPF for desktop development
using .NET CF 3.5 for Windows Mobile development
This framework does not obviously need to support Android, however I am considering Mono for Android to develop the Android client (for easier maintenance of the whole platform), so portability would have been an added asset.
So far I ruled out:
Prism (does not support WM based mobile devices - Windows Phone 7 only)
MVC# (does not support WPF)
I would appreciate any hints that would aid in researching the subject further.
These MVVM Frameworks work with Windows Phone 7:
Caliburn Micro
MVVM Light (it doesn't advertise it, but I've been to a demo where it was used on WP7)
ReactiveUI (Uses the Reactive Extensions for .NET)
My personal favorite is ReactiveUI, but if you've never used the Reactive Extensions it can be a brain burner at first.
As for UI Composition (you mentioned Prism), there aren't a lot of options, mostly due to reflection restrictions on the phone. I have seen an article where someone got basic MEF working on the phone and MEF is probably all most people need in this situation. You can check out that article here.
Hope this helps.
In my opinion, this would be a custom Framework with a mix of UI Processes for different client types. The business logic or entities can definitely be reused to suit the needs of the view.
I did the same research and I concluded the following (which I did not implement yet):
There aren't any open source MVVM frameworks that support .NETCF. You
can only find MVC or MVP, but not MVVM.
Suggestion: get the source code of an Open Source MVVM framework that supports the Full/Desktop .NET, and see if you can adapt it(so that it recompiles) to the .NETCF. I found the following two, which also support the other platforms that you mentioned:
MVVM FX for Windows Forms and Visual WebGUI - Home
MugenMvvmToolkit
Other than that, I don't see any other way of doing this.
HTH,
MVVM wouldn't make much sense in Windows Mobile + .NETCF since you don't have INotifyPropertyChanged and implementing Model-View-Presenter in WPF or any INotifiyPropertyChanged supported framework wouldn't be as effective as Model-View-ViewModel
You can share assets between the full and compact framework by moving most of the business logic into a seperate class library (or several) that target the .NETCF. You can reference a .NETCF library from a full framework project, but not the other way around.
Check out this very good article by Daniel Moth describing how to share assets between the compact and full framework:
http://msdn.microsoft.com/msdnmag/issues/07/07/ShareCode/default.aspx
Would you still use Prism with SL4, even when Silverlight 4 already supports commanding, e.g. MVVM concept?
Are there features in Prism which can be used and improve design of Silverlight 4 application?
Modules - to structure the application (with an option of dynamically loading modules when needed
RegionManager - to deal with assembling UI (layout) from components from different independent modules
EventAggregator - to deal with cross-module communication (e.g. loosely coupled communication)
On a general note, sticking to the Prism pattern forces an additional level of structure on your Silverlight development. This is especially of benefit to dev teams, more than individuals, as that work can be cleanly partitioned.
The latest Prism 4 went to beta on August 2nd and now adds MEF support (Managed Extensibility Framework) to the other features PL mentions.
MEF is great for building a plug-in based framework. As an example of what it can do the Visual Studio IDE itself uses MEF to implement pretty much everything as a plug-in. Now you can do the same sort of dynamic plugins in Silverlight!
We are currently doing Silverlight Prism development with the previous 2.2. release, but will move over to Prism 4 as soon as it is out of Beta.
With the new Silverlight 3.0 feature that allows the components to be hosted outside of the browser, our company is looking for details on the differences between this new feature and WPF Windows applications (since Silverlight is partly a subset of WPF).
Is there a good resource that lists the differences between Silverlight 3 outside of the browser and WPF applications? Areas like permissions, functionality, etc.
If there is no web resources, what are some of the key differences?
Silverlight OOB applications have the exact same capabilities as an in-browser Silverlight application, except they lose their ability to communicate with the DOM (via the System.Windows.Browser API).
Here is a brief list of some common things that you don't have access to with Silverlight that you might be planning on using in a WPF application:
Client File System
Client Windows registry
Client Event Log
Client OLEDB
Client SQL Client
This may seem like a long list but it should look fairly familiar to the no-can-do list for any web application platform (a la ASP.NET, JSP, PHP)
Jaime Rodriguez has a very good post covering the key differences and features of both Silverlight and WPF: Here. It's very high level and meant to differentiate between features that a WPF and Silverlight Out-of-Browser application bring to the table.
markti is correct.
Scott Barnes - Rich Platforms Product Manager - Microsoft.
Is it possible to build a good medium to full sized application using just silverlight as a host?
A few things that would be needed:
- dynamic pages (one silverlight "screen" can switch between screens, like a normal app.
- similar to a java applet which launches from the browser
I see that Telerik sells RadControls for WPF...but this is only useful (to me) if Silverlight can be a rich client platform through the web.
Although still a somewhat immature platform, Silverlight 2.0 supports many of the features that I would expect from a platform needed to create full sized applications.
Data access through web services and local data/object query support with Linq
Many feature rich controls such as datagrid, treeview, etc
A very usable subset of the CLR (common language runtime)
Access to restricted local storage on the client machine
It is cross platform
There are already some great add-ons, like Telerik and the Silverlight Control Toolkit
For your specific scenario, Microsoft has published a tutorial on Multi-page Applications
Absolutely. I've been looking into this and believe that it's as easy to do in Silverlight as it is in any other language. Remember that Silverlight 2 uses C# 3.0 and from that you can build anything that's not included in the Silverlight version of the CLR. Also, the fact that Microsoft gives you access to the .NET source code means that you can compile the missing parts of the .NET libraries with your application. (No idea about the licensing issues with that though.)
I've seen a presentation of a full featured CRM application two days ago. Although it's still alpha: It looks and feels like any office application. I don't know details but for me it's a proof of concept.