The Smart Client Architecture Guide is nearing completion. It’s been an interesting journey; writing stuff down always focuses the mind.
One of the problems with writing an architecture guide is the need to try and give concrete advice without getting too involved in the implementation details, and at the same time being sensitive the very many different environments and scenarios where a smart client application could be used. We’ve had to shy away from the “this is the best way to do x” and go for a “you should consider doing x, these are issues, and these are the options you have available” kind of approach. This could be very unsatisfying for some but I hope it strikes the right balance between giving useful advice without being too restrictive.
Unfortunately, we’ve had to drop the chapter on smart client patterns. We realized that to do this justice would require a lot more time than we had so we’ll have to published this separately at a later date. I am trying to work out which architectural patterns make the most sense and how best to implement them. There are a lot of smart client relevant design patterns out there already which are well documented, such as Model-View-Controller, etc. I am more interested in the higher level patterns which make it easier to do stuff like data caching, working offline, and asynchronously interacting with remote services.