Anyone who knows me also knows I am a sort of "enterprise architecture junkie". Fifteen-plus years of application development focused on the enterprise has taught me many lessons, and the recent major push on enterprise application design (reinforced through Reference Architectures, Patterns and Practices and Application Blocks) is a great way to share the wealth of knowledge surrounding enterprise application development.
From a Microsoft and .NET perspective, I have to salute the efforts made towards providing a tremendous amount of content surrounding enterprise application architectures. The MSDN Architecture Center (http://msdn.microsoft.com/architecture) provides a great repository of information. One thing I have found lacking from MS in regards to enterprise architectures, however, is content focused on the .NET Compact Framework.
In most enterprise scenarios, Windows Mobile devices and the .NET Compact Framework are used to extend specific parts of the enterprise application to mobile users. As a result, it could be said that the most applicable portion of the .NET Enterprise Reference Architecture is the Presentation Layer. If followed closely, this layer should most likely utilize the MVC (Model-View-Controller) design pattern. Interestingly enough, there is only the vaguest of references to Windows Mobile devices in any Presentation Layer documentation, and usually only occurs as a passing reference in Smart Client topics, with all the real focus (including sample code) on .NET Framework applications (presumably for laptop and Tablet PC devices). I really believe that the MVC (with some "tweaking" for platform optimization) design pattern is highly applicable in the design of .NET CF applications connecting to a .NET backend. Lets face it - that is the whole idea behind a design pattern being "language-agnostic". The lack of supporting information from Microsoft, however, leaves me constantly having to justify an MVC approach to design.
Another area of frustration for me relates to the ever-growing number of Microsoft "Application Blocks". For those who are unaware, Application Blocks are essentially pre-built components that provide application support and are usually based upon design patterns and other best practices. Unfortunately, there are a number of Application Blocks that would be of great benefit for enterprise .NET CF developers. The most notable of these is the Data Caching Application Block. Great bit of functionality, .NET Framework-specific (even though it is heavily promoted in Smart Client development). I have considered tearing apart and rebuilding the Data Caching Application Block, but the time and effort required is just a bit too much for me with my current schedule. This is something, however, that I believe MS should be mindful of when delivering the SmartClient message.
Don't get me wrong here - Microsoft has done an awful lot to promote .NET CF development in the enterprise. My point is that there is still much more that can be done, especially when it comes to delivering "fair but equal" content relating to the MSDN Architecture Center and supporting tools like Application Blocks. If nothing else, it is content of this very nature that makes my job of promoting and justifying the .NET CF in the enterprise a lot easier. It does get a bit frustrating when someone points out that the .NET CF doesn't seem to get the same support (or even mention) when it comes to Microsoft's own architectural guidelines.
Finally, I would be curious to hear other people's experiences relating to this. If you are extending a part of an enterprise application to the Windows Mobile platform, are you leveraging any architectural guidelines or design patterns? If so, how's it going? If not, why?