I need to decide on the optimal way to write a C# client application to view the dataset in a number of different views. One, some or all views may be visible at once and must be coherent.
A simplified illustration of the dataset would be something like this, assume around 10000 items.

Based on this dataset a number of aggregates must be calculated, such as the sum of values for each ItemId and for each ClientId. The actual calculations are a bit more complicated, but assume that around 30 different aggregates must be calculated.
There will be around 10 clients that will view the data at any one time. Each user will decide if the data is continuously updated or refreshed automatically.
The data is stored in SQL Server 2008 R2 and all clients have access to this directly and are on the same LAN.
The UI needs to be non-blocking, so that new data can be read in the background and the active views refreshed when all aggregates have been calculated.
- What architecture/technology/pattern is best suited to this sort of scenario?
- Should I use WPF, Windows Forms or Silverlight?
- Should the views be pre calculated on the server or should the client do this processing?
- Should the client connect directly to the database or via a WCF service?
Unfortunately I think the answer for most of your questions is “It Depends”.
1 – MVVM makes sense given your requirements of many views of the same sets of data.
2 – Which technology are you most familiar with now, and what is the timeframe of your application. If you’re very familiar with WinForms and have a tight schedule that makes sense. If you’re not and you have time learn, then Silverlight may make more sense. I’m kind of torn on WPF, since nowadays it seems more like Silverlight++ instead of the other way around. In other words, if you need to do a Line of Business app, pick Silverlight UNLESS theres a requirement that can only be fulfilled with WPF.
3 – The answer to this question depends on 2 things: How often is the data being updated and how complex/suited to SQL are the calculations. I would generally prefer to handle aggregating on the server side, but depending on the exact calculations you’re performing that may or may not be feasible.
4 – This will really be made for you depending on your choice of technologies. Silverlight can’t connect to the database directly, so you have to use a service. WinForms and WPF can directly connect to the database. Even so, going with a data access service can help if you find that having every client directly call the database could be a performance issue.
A lot of these decisions are trade offs, and you might not even know that you’ve traded something until it becomes an issue.
TLDR: It depends.