Yet Another Technical Support’s added value: Architectural Guidelines
- Advisory Services vs Problem\Resolution
- Architectures for dynamic forms in NETCF
Many developers out there don’t know the full potential provided by the experts at Microsoft Technical Support… and I really want to do some marketing here!! For example, a typical scenario is as follows: you’ve just taken ownership of a project and don’t know where to start as it’s the first one targeting NETCF and Windows Mobile (just to use a beloved example…). A good investment at this point is to use some Advisory hours your Technical Support contract may have (you may need to be a Partner, probably – just check the //microsoft.com/support website).
Advisory Services are used to provide suggestions, guidelines, recommendations about how to possibly achieve a goal, so that ISVs can do a conscious choice; those services are something different from “My Visual Studio \ NETCF application doesn’t work as expected: help me on finding what’s wrong”-kind of requests (these are called “Problem\Resolution Services”. The 2 kinds of services are defined as follows:
"Problem Resolution Services" definition: Microsoft Problem Resolution Services provide assistance for problems with specific symptoms encountered while using a Microsoft product, where there is a reasonable expectation that the problem is caused by the Microsoft product. A Problem Resolution incident is defined as a single support issue and the reasonable effort needed to resolve it. A single support issue is a problem that cannot be broken down into subordinate issues. If a problem consists of subordinate issues, each shall be considered a separate incident. If a problem is determined by Microsoft to be the result of a defect in a Microsoft product, the customer will not be charged for that incident.
"Advisory Services" definition: Microsoft Advisory Services provides short-term advice and guidance for problems not covered with Problem Resolution Service and requests for consultative assistance for design, development and deployment issues.
So I really appreciated some time ago a .NET desktop developer asking for initial suggestions about how to develop his form-based NETCF application, where he needed to dynamically create forms and controls. I ended up with the following list of generic suggestions (just to start…, which may be useful for other NETCF Developers out there!
1. Shell Application
On large applications you might create a shell application: the main functionality is then created as separate applications. This minimizes the amount of memory being consumed by the active applications, which you know is a very scarce resource for NETCF apps. The shell would act as a guardian and kill background applications if it decided that too much memory is being consumed. Protect the shell and make sure it’s always available; then, make sure the foreground application the user is using is always running.
2. Microsoft Mobile Client Software Factory (July 2006) and Windows Mobile Accelerator (March 2008)
Microsoft Mobile Client Software Factory – This is a set of sample codes provided by Microsoft to Smart Devices developers: you would find various blocks (DataAccess, OrientationAware, and so on) that I would recommend you having at least on the dev machine to index the source files, so that when you want to search for a class’ usage you can use that sample. NOTE: some time ago I handled a case where the developer followed the pattern about dynamic form creation shown by the Mobile Client Software Factory, called * "Composite UI" *, and claimed that the perceived performances of dynamically creating\destroying controls (which is the base of the "Composite UI" pattern) were really bad. Indeed this was a pretty common complaint about the Mobile Client Factory (July 2006) and one of the reasons for the publishing of the
Mobile LOB Accelerator (March 2008) – where Composite UI block is NOT included.
Mobile Client Factory is a great idea once devices have lots of memory and processing power, as for desktops: but until then you are better off using Forms the way they were originally intended basically like the LOB Accelerator does.
So, pay much attention on dynamic creation of forms and controls.
3. MVC Pattern and NETCF
Just read all the MVC-related posts written by the NETCF guru Alex Yakhnin. He also posted the project to codeplex.
4. Mobile Application Architecture Pocket Guide
You must read “Mobile Application Architecture Pocket Guide”: as Rob Tiffany said, “[…] This is the first patterns & practices update to this guide since 2002 so it's a welcome sight to to have it out there for all our Windows Mobile developers. ”
HTH,
~raffaele
Comments
Anonymous
March 16, 2009
Addendum: Chris Tacke has just published the OpenNETCF.IoC Framework on Codeplex... "[...] This framework is patterned after Microsoft's Smart Client Software Factory (SCSF) object model, but actually built with device memory and processor constraints in mind." http://blog.opennetcf.com/ctacke/2009/03/16/OpenNETCFIoCFrameworkSourcePublished.aspx THANKS CHRIS! HTH, ~raffaeleAnonymous
May 07, 2009
An update on the Mobile Client Software factory: a new version is under development, which updates the original blocks and does away with the evil CAB! Instead there is a new block called ContainerModel which is a lightweight and very fast dependency injection container. The new version fixes the performance problems of MCSF v1 and gives mobile developers a great framework to develop well-architected and testable apps. The offering will also include community editions of great controls from Clarius and Resco to allow you to build great looking UIs as well. You can download the latest bits at http://mobile.codeplex.com. Watch out for further updates over the next few months, including reference implementations, Quickstarts (at http://mobilecontrib.codeplex.com) and screencasts.