Best design/architecture using WPF? RRS feed

  • Question

  • We have a big project (lot of screens) that needs to be implemented in .Net with Oracle as backend over a two year time frame. We are planning to do a smart client application. Since it is a 2 year project we want to stay with the present/leading technologies (WPF, WCF etc) and not get obsolute by the time we ship the full application. I have the following questions and would appreciate your feedback.

    1. We evaluated that CAB architecture (using SCSF) fits to this project. Since the deadline for this project is 2 year from now, is it a good option to pick CAB architecture? if so, how will be the future of CAB after two years. Will it be supported in the future framework releases? we don't want our application dependent on Framework 2.0 if the framework in the future is 3.0 or 4.0 and so on. We want to compile and make the application use the latest framework (yes, we are aware that depricated methods/classes used in the application must be fixed).
    2. What is the best design to develop a Smart client App using WPF?
    3. Best grid control.


    Wednesday, May 9, 2007 11:24 PM

All replies

  • -1. There is no "best".

    0. If you don't need to support disconnected scenarios, it's a rich client, which is simpler.

    1. Separate the two; the CAB/SCSF and the design that it implements. If you've evaluated the design and it fits, that probably won't be something you replace, regardless of the technology. Will the actual CAB implementation live forever? No. If your design is sound, it shouldn't be a big deal.

    2. WPF shouldn't much change your design from the one chosen above. It does add some architecturally valuable features like ICommand, but you could have easily implemented those yourself, had you designed for them.

    3. Whatever you already know and covers your needs.


    Be aware that if your smart client needs to receive updates or notifications in the background, the thread safety of your data needs to be handled - by design. There is no technology currently available that just handles everything for you.


    Check out the Smart Client category on my blog for more information.

    Thursday, May 10, 2007 8:40 PM
  • First, thanks for your response.


    In our case, we will not be supporting disconnected scenarios. Yes, we want the client application to be rich and use web services for business logic and data manipulations.

    Internally we evaluated the CAB implementation for our design, but that doesn't mean that we must stick to that approach. Since the project has not been started, I am looking for some recommendations and suggestions in terms of design (for .Net apps) to see if there is better (if not best) approach than the CAB implementation. Like I mentioned earlier, we want to stay on top of the current technologies and also to pick a design that won’t get obsolete in the next 2 years.


    By the way, I couldn’t able to access your blog. Can you please verify your link or website?

    Monday, May 14, 2007 5:46 PM
  •  Any thoughts on this one??
    Friday, May 18, 2007 3:12 PM
  • You are asking a rather general question - and as Udi noted there isn't a best solution
    It is accepted to say that MVP and derivative patterns like Supervising controller / Passive view are a good direction (MVP is supported by CAB). Also should probably also  have a look at the GUI Architectures paper the Martin Fowler published

    Sunday, May 20, 2007 10:43 PM
  • Hi Civi, I want to refer you what's in MS roadmap around your discussion topic. Will paste this as it was published at the MSDN Architecture Center:


    Microsoft Code Name "Acropolis" July Community Technology Preview

    Wednesday, July 04, 2007, 5:00:00 AM
    Building on the vision of software + services, Microsoft Code Name “Acropolis” makes it easier to build and manage modular, business-focused, client applications for Microsoft Windows with the .NET Framework. It builds on the rich capabilities of Microsoft Windows and the .NET Framework, including the Windows Presentation Foundation (WPF), by providing tools and pre-built components that help developers quickly assemble an application from loosely-coupled parts and services. Code Name “Acropolis” reduces the complexities of building occasionally connected client applications and provides the ability to assemble and reconfigure systems without having to write as much code. It is part of the .NET Client Futures release, Microsoft’s preview of upcoming technologies in Microsoft Windows client development, available now at
    A talk with its authors is available here
    Thursday, June 21, 2007, 5:00:00 AM | Richard Campbell,Carl Franklin
    Carl and Richard talk with members of the Microsoft Acropolis team at TechEd 2007. Acropolis is a software factory-ish toolset that allows business developers to develop quality line-of-business WPF applications with ease.
    Hope that helps
    Tuesday, August 7, 2007 8:10 PM
  • Civi,


    1. I'd second the fella that recommended looking into Acropolis if you're into CAB and want it for WPF, especially if you can wait on it. Smile

    2. Funny you should ask.  Infragistics is actually working on a WPF reference application that will be released soon.  There's also one out called Family.Show from Vertigo, and has part of it done in WPF.  I'd say all of these will be good resources for learning from others and what they've done w/ WPF.  Since it is relatively new, best practices, per se, are still being discovered/developed.

    3. Infragistics, of course!  xamDataPresenter is an extensible data visualization control that includes grid and carousel view.  xamDataGrid is focused in on the hierarchical data grid.


    Please feel free to contact me at ambrose [at] infragistics [dot] com if you or your company would like to explore our products or if you want to be notified when we release our WPF exemplar (a.k.a., reference application). 


    There are some new facilities in WPF that do make developing the UI layer easier and different, so it's not just a simple port from WinForms or ASP.NET knowledge (more like a blend of and improvement on both).  So you'll want to invest the time (as you appear to want to do) in learning the "WPF way" of doing things. Smile

    Tuesday, August 7, 2007 10:30 PM
  • Civi,


    Those first few words that that you uttered in your question say such a lot about what you should be doing!


    "We have a big project..."


    Without going any further, your solution should be implemented using patterns such as a specific version of the MVP patters, and that in the same way as you would design any other application, you should design this one.


    The fact that the application will use WPF is irrelevant, since that is only a possible presentation method, and you may well extend it in the future.


    I've seen a few tutuorials using WPF, and almost ever one without fail codes without an MVP type setup, so you have a fat client.  You need to decouple that presentation layer from the rest of your code.


    My view is that, in 2 years time, the CAB architecture will either no longer be, or have been improved so much so that you probably would be wanting to replace it.  Two years is quite a long time in software.  You should use an architecture that can allow you to swap out these technologies, patterns, application libraries and so on, should your solution require it in the future.  Design with what the application has to do, not necessarily first how it has to achieve it, or what patterns or technologies it must use.  Going along that path will couple your solution to the technology almost certainly.


    If you could present more specific requirements of the system, maybe we could answer those questions, or start a bit of a discussion on what is a good idea, and what is not?


    I hope this helps,




    Tuesday, August 7, 2007 10:45 PM
  • Going a bit further, I suggest looking at the project requirements and try to arrive at self contained blocks of funtionality that add value to the business/client. This way you can focus in one of the blocks and will have a much more maneagable situation to design/architect. Also this will let you apply lessons learned to other blocks of funtionality, decrease the risk and get a running app adding value long before you would like to replace the technology you used to build it.


    My 2 cents,

    Freddy Rios

    Wednesday, August 8, 2007 12:31 AM