Developer’s Notebook – Architecture
Platforms and Frameworks
The overall architecture of the software is based on the Single-purpose principle of SOLID software development principles. Each layer of the application serves a single purpose and I have gone to great lengths to separate out specific properties and functions into sections of code that serve a single overall purpose or group of tasks.
Build Targets
.NET Framework Target | NET Standard 2.0 | ||
Platform Target(s) | iOS | Android | UWP |
Native Platform Frameworks | iOS11 | Android 8.0 (Oreo) | UWP (current) |
Architectural Design Pattern | Model-View-View Model (MVVM) |
We are using Xamarin.Forms and a Model-View-ViewModel (MVVM) Design Pattern, combined with data binding directly in the XAML code as well as BindingContext assignment to child modal pages when child items are added, modified or removed. All interaction is brokered by the ViewModel classes.
Our application structure actually breaks down further like the following diagram showing a separation between the View Model classes and the Work Unit layer.
The Work Unit Layer is the UnitOfWork class and this introduces a new Design Pattern called the Unit of Work Pattern, which combined with the Repository or Data layer, together with the actual object models, make up the Model layer. Objects are loaded, saved or removed from the data store from within the Repository Layer classes.
All of this abstraction and layering makes the application’s ViewModel layer more testable than it would otherwise be with a tightly-coupled Data Layer.