I have recently been experimenting with different options with a view to finding "The Best" thing for implementing line of business applications.
As you probably know, there are many ways of achieving any one goal - choosing one option will often solve most, but not all of the problems. There are two main delivery mechanisms - via an operating system (Windows) or via a browser (FF, IE, Opera, etc). Personally, I don't see the point in using the browser for anything relating to LOB applications - the implementation relies on layers of hacks - however end users often want a "Zero Footprint Install" and ignore the fact that if nothing is installed then the presentation layer needs to be sent to the client rather than just the data. Anyway, enough waffle, it's 2009 any we have quite a few options...
-
-
Anything can be completed, limited only by your imagination and skills.
-
May require Win API calls.
-
Must be installed on the local machine.
-
Windows only.
-
-
A hack on top of a hack.
-
Can only run in the browser.
-
Requires a server.
-
Very restrictive options.
-
- In theory, again, anything can be completed depending on the deployment.
-
Can run through the browser however this restricts access to the local machine.
-
Can run in the OS.
-
Windows only.
-
-
Quite restrictive - no (or little) access to the local machine.
-
OS independent - can run in Windows and Mac environment (and in theory, it can run on *nix via
moonlight).
-
Small feature set - not many controls.
-
Runs in the browser.
So how can we narrow our choice? Lets think about the features that actually matter...
-
Theming - we often need to be able to change the look of an application to suit the end user.
-
Databinding - this is what LOB applications are all about so it need to be fast to code a fast to execute.
-
Performance - If an application is not responsive, the user will not like it.
-
Usability - the controls that we use can have a major impact on the user's experience.
-
Development Time - we need to complete the application within a set time in order to remain profitable.
-
Maintainability - when changes are needed, it should be easy to do.
Now how do each of our options compare when we factor in each of these features?
| |
Winforms |
ASP.NET |
WPF |
Silverlight |
| Theming |
1 |
7 |
6 |
6 |
| Data Binding |
4 |
1 |
8 |
7 |
| Peformance |
8 |
1 |
6 |
5 |
| Usability |
5 |
3 |
8 |
4 |
| Development Time |
6 |
2 |
6 |
6 |
| Maintainability |
5 |
5 |
5 |
5 |
| Total |
29 |
19 |
39 |
33 |
The above table is quite a simplistic view - I didn't do anything complicated - I just split 20 across each row. It does show, that in my opinion, WPF is "The Best" solution with regards to the required features however, if a cross platorm implementation is required then silverlight is the way forward (even though version 2 is not supported in moonlight as I write this).
As a footnote, various aspects of each option can be improved via the use of third party components. My experience gives me the following opinions...
-
-
WinForms - a fast grid but the company's past in Delphi/C++ seems to have crept into their .NET products resulting in components that require in-depth knowledge, rather than just working. Many aspects are odd (few exceptions thrown) some are just wrong (an invalid cell keeps focus until it is valid).
-
WPF - I didn't get past the grid - it is absolutely disgraceful (although it is currently only a beta CTP). Their demo seems great but when I loaded it with 10+ columns and 100+ rows, any operation took 2+ seconds on a quad core machine.
-
ASP.NET - not touched it.
-
Silverlight - not touched yet, although if the WPF controls are anything to go by, it will be a waste of time.
-
-
WinForms - good although I don't have a great deal of experience.
-
WPF - good on the whole - the ribbon and dock manager are brilliant but grid performance is bad.
-
ASP.NET - not used.
-
Silverlight - good but not very feature rich.
-
-
I've not used their controls at all but their silverlight offering looks amazing - will update this soon.
6050bcf9-4291-43ad-b735-437c7177fd89|0|.0