MonoCross is based on a modified Model-View-Controller pattern that enables separation of the presentation layer, (View) from the application code (Model + Controller). This modification enables portability of application code across multiple platform targets.
The pattern was developed in response to increasing demand for applications on mobile platforms, (particularly Apple iOS and Google Android), and the desire to maximize investment in software development for these devices.
Each of these platforms is built on a different technology, from different versions of .NET on Windows-based devices, to Objective-C/Cocoa on iOS, and multiple flavors of Java on most other platforms including Android. To develop a native application for all of these meant learning multiple frameworks, languages and development tools. That is, until…
The Mono Project (http://www.mono-project.com) was initially created as an open-source port of the Microsoft .NET framework in C# for Linux, but has recently grown to include support for iOS (http://monotouch.net), and Android (http://monodroid.net/). This made it possible to unify our development environment on a single framework, and make truly cross-platform mobile applications.
We quickly found that cross-platform portability of most application code was really easy — but when it came to creating the rich, native user experiences that most people have become accustomed to there was still a lot of variation in the approaches.
Although MonoTouch and MonoDroid use the same language and development environment, they still require knowledge of the native coding conventions when building a presentation layer. MonoTouch uses the same native concepts that are used in CocoaTouch, (View Controllers and Delegates), and MonoDroid uses the same Activity based model used in native Android Java. This made sharing presentation code across platforms much more difficult.
It became rather obvious that we needed a pattern to negotiate this mismatch, (not to mention a way to manage different compilers for each platform). MVC seemed to be a great fit, but we needed to separate the View from the Controller in a more loosely-coupled manner to enable the use of a different presentation coding paradigms.
So the MonoCross implementation of MVC uses a separated view interface that allows the shared application code to take care of navigation, data access, and initialization of the model, while the platform-specific views handle the rendering.