Developing an android application by applying a software architecture pattern is always preferred by the developers. An architecture pattern gives modularity to the project files and assures that all the codes get covered in Unit testing. It makes the task easy for developers to maintain the software and to expand the features of the application in the future. MVC (Model — View — Controller) and MVVM (Model — View — ViewModel) are the two most popular android architectures among developers.
The Model—View—Controller(MVC) Pattern
The MVC pattern suggests splitting the code into 3 components. While creating the class/file of the application, the developer must categorize it into one of the following three layers:
- Model: This component stores the application data. It has no knowledge about the interface. The model is responsible for handling the domain logic(real-world business rules) and communication with the database and network layers.
- View: It is the UI(User Interface) layer that holds components that are visible on the screen. Moreover, it provides the visualization of the data stored in the Model and offers interaction to the user.
- Controller: This component establishes the relationship between the View and the Model. It contains the core application logic and gets informed of the user’s response and updates the Model as per the need.
The Model — View — ViewModel (MVVM) Pattern
MVVM pattern has some similarities with the MVP(Model — View — Presenter) design pattern as the Presenter role is played by the ViewModel. However, the drawbacks of the MVP pattern has been solved by MVVM. It suggests separating the data presentation logic(Views or UI) from the core business logic part of the application. The separate code layers of MVVM are:
- Model: This layer is responsible for the abstraction of the data sources. Model and ViewModel work together to get and save the data.
- View: The purpose of this layer is to inform the ViewModel about the user’s action. This layer observes the ViewModel and does not contain any kind of application logic.
- ViewModel: It exposes those data streams which are relevant to the View. Moreover, it servers as a link between the Model and the View.
Difference Between MVC and MVVM Design Pattern
MVC(Model View Controller)
MVVM(Model View ViewModel)
|Oldest android app architecture.||Industry-recognized architecture pattern for applications.|
|User Inputs are handled by the Controller.||The View takes the input from the user and acts as the entry point of the application.|
|Controller and View exist with the one-to-many relationship. One Controller can select different View based upon required operation.||Multiple View can be mapped with single ViewModel and thus, the one-to-many relationship exists between View and ViewModel.|
|The View has no knowledge about the Controller.||The View has reference to the ViewModel.|
|This architecture has high dependency on the Android APIs.||Has low or no dependency on the Android APIs.|
|Difficult to make changes and modify the app features as the code layers are tightly coupoled.||Easy to make changes in application. Howerver, if data binding logic is too complex, it will be a little harder to debug the application.|
|Limited support to Unit testing.||Unit testability is highest in this architecture.|
|It does not follow modular and single responsibility principle.||Follows modular and single responsibility principle.|