a ‘contract’ Model & View Layers never communicate with each other directly View layer is completely passive Android API’s are bound to the View Layer Model & Presenter are pure Java code Functionality of each layer is bound & limited to perform specific tasks, which makes it easier to find and fix issues
Every screen is in its own package containing the Activity/Fragment (View), Presenter & Contract With each screen having it own package and business logic, its easier to modify or add new features with minimal collision
repository format Model layer is not bound to any contract hence making it accessible to all parts of the app With all parts of the app placed under specific boundaries, modifications or new updates pose minimal impact on existing peices
or Model layer. Easier to write tests as the complete app is broken to down to smaller fixed modules Since Model & Presenters are pure Java, they can be easily tested using only jUnit Overall increase in testing speed since jUnit tests are faster than Espresso and other Android Tests