"There have been many different ways to organize the code for a rich client system. Here I discuss a selection of those that I feel have been the most influential and introduce how they relate to the patterns" - Martin Fowler, GUI Architectures 18 Jul 06
The thing I respect most about Martin Fowler is that he never suggests that there is only one way to do things right (which implies that all other ways are wrong). My position through my development career as architect, manager, lead, and grunt coder is that "if it gets the job done - then it is right". Developers have varying levels of experience and sometimes the most inexperienced developer may have the best idea on how a particular task can be done better.
There can be no single right way because unlike any other industry in the world, ours is truly an agile one where six months from now everything we know can become obsolete. New operating systems, languages and tools are constantly emerging and to complicate matters they are so extensible we have so many different parts that we can integrate/choose from, i.e., dependency injection tools, data storage, frameworks, etc.
There was a time when the constant change overwhelmed me, I'd always be telling my wife "I am falling behind" even though she would watch me spend hours/days/years trying to keep up; it was like walking up an escalator that was going down faster than I was walking up. It didn't get better until I read the article "keeping sane in wake of technology's pace" - it was exactly how I was feeling!! Like Rocky I decided to embrace the change. I accepted the fact that it will never stand still long enough for me to become an expert and that this was okay...
Patterns such as MVPVM and MVVM along with tools such as Prism, Unity, etc. are available tools within software architecture. We should not attempt to put any particular process into a box, i.e., we should not say MVPVM or MVVM should be used for WPF development or Prism event aggregation and navigation should be done a particular way. Once we start doing this then every other way will be wrong and prevent the emergence of new ideas. For a team to be truly successful it needs to be tolerant of new ideas, even if from the greenest/newest developers. Ideas should be evaluated by the team for its ability to get the job done and not whether or not it fits neatly within defined boxes.
For the reasons noted I don't turn on blog comments (for debates, criticism or praise), I'm merely offering available architectural tools and patterns that can be used to meet enterprise application development. I strive to solve problems encountered and provide fully-functional solutions for "a way" to solve them. I must admit this has been the most challenging task because, since the very beginning, my solutions have become obsolete before the framework I was using had a chance to mature - forcing me to constantly start over (reference http://SDMS.CodePlex.com, http://PasswordMgr.CodePlex.com and now http://SolrContrib.CodePlex.com). So many times I enrolled as a front-runner only to abandon it because when new technology comes out I have to start over again, otherwise I risk my project being obsolete by the time it is released.
Today I question whether C# .NET will have a place in the future and seriously doubt the future of Silverlight and Silverlight for Windows Phone (which are the basis of the referenced password manager project). I continue forward with SolrContrib project with caution, investing only enough time in the framework to get it done, as I can see the warning signs and really need to commit 2012 to mastering the Metro development environment for Windows 8.
I will continue to share my efforts, not as an expert or authoritative source, but as a fellow developer that has found "a way" to solve problems encountered. If you have a more efficient way to achieve something I have done, that others may learn from me inefficiently, by all means please let me know!