Rocky Lhotka gave a nice and quite deep speech on how we, regular software developers, can prepare ourselves to the brave new world of Metro and Windows 8. The trouble is, you see, all these community previews, betas, and release candidates, however cool and shiny they might be, are usually not so good for building real-life software. So we, regular developers, are stuck with boring old stuff like Silverlight and WPF (or worse, Windows Forms). We are basically living off the dead corpses of outdated technologies, that become obsolete the moment they get out the Microsoft’s door.
The double jeopardy of current situation is that Metro run-time is ideologically closer to Silverlight then to WPF. It is lightweight and will therefore leave out many of the features that WPF has, but Sliverlight does not, like data triggers or multi-bindings. Anyone using a data trigegr or a multi-binding today is using a XAML construct that has no future. From the other hand, Metro apps require async APIs and async/await paradigm, which will make it into WPF 4.5, but not into any upcoming version of Silverlight. So, basically, trying to develop an application that would be then easily ported to WinRT is a futile exercise. It is even more futile in light of was said during the UI guidelines session: even if we could make the code technically compatible, it would be ideologically wrong.
The solution is (surprise-surprise) to keep the actual UI layer thin and put as much logic as much logic as possible into headless business and presentation objects, i.e. models and view-models. Give me an M, give me a V, give me a V, give me an M. What does it spell? 🙂 Well, don’t sweat it, Model-View-Presenter would also do just fine.
Another, not really related note on Metro. Unlike Android and browsers, Metro lacks global definition of “back” button. Each app can implement its own version of “Back” but it does not work between apps. This is especially problematic if your app launches a browser. You can browse the web, but hitting Back won’t lead you back to the original application, as might be expected, and as indeed happens on Android.