The document discusses the Model-View-Presenter (MVP) design pattern for Android applications. MVP separates an application into three parts: the Model, which manages the data; the View, which handles the user interface; and the Presenter, which controls the flow of data between the Model and View. This separation makes the code more modular, readable, maintainable and scalable. An example is given demonstrating how to implement MVP for a login screen in Android by defining interfaces for the View and Presenter and implementing separate classes for the Presenter and Activity/View. MVP helps organize complex code and allows easier updating of components like changing the database without affecting other parts of the application.
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Model View Presenter For Android - MVP Design Pattern
1. Model View Presenter For Android
In this blog, we are going discuss about MVP Design Pattern for android which is a
better and modified alternate of MVC.
Note:
I am trying to make this(MVP) concept as easy as possible because everyone might
have different opinions for MVP. So, do not get confused because it is simply a
design pattern to write our code in more readable and segregated manner. The main
concept we are going to learn is how all three MODEL, VIEW, PRESENTER are
interlinked and after getting familiar with this, you can implement this design pattern
in your own way.
What is MVP?
MVP is a design pattern for developers to write their code in more readable,
maintainable and scalable manner. In MVP, our code is divided into three parts
named as Model, View and Presenter rather than placing the whole code in one
Activity.
1.Model
Everything which is related with data is a part of Model. Model contains a data
provider and the code which fetches and updates the data. This part of MVP i.e
Model updates the database or communicates with a web server.
2.Presenter
The presenter will have the whole business' logic and when an operation is performed
or data is changed then it will notify the View for updation .
2. 3.View
A view part of MVP contains a visual part of our application like showing dialog,
toast messages, handling visibility. View contains only that part which is related to UI
and it does not contain any logic related to displayed data, and it is controlled by
presenter.
Why use MVP?
This MVP design pattern helps to segregate the code in three different parts which are
business logic (Presenter) UI part (View) and data interaction(Model). This
modulation of code is easy to understand and maintain.
For example: In our application, if we use the content provider to persist our data and
later we want to upgrade it with SQLite database then it will be very easy in case of
MVP design pattern.
How to implement MVP for Android:
A simple example for Login a user with MVP design Pattern.
/*The Interface LoginPresenter.*/
public interface LoginPresenter
{
/*when user click on login button from Activity*/
void handleLogin(String username, String password);
}
/*The Interface LoginView.*/
public interface LoginView
{
void showValidationErrorMsg();
void loginSuccessFully();
void loginFail();
}
/* Class LoginPresenterImpl.*/
public class LoginPresenterImpl implements LoginPresenter
{
4. initializeView();
presenter = new LoginPresenterImpl(this);
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
presenter.login(textViewUserName.getText().toString(),
textViewPassword.getText().toString());
}
});
}
private void initializeView()
{
textViewUserName = findViewById(R.id.textViewUserName);
textViewPassword = findViewById(R.id.textViewPassword);
buttonLogin = findViewById(R.id.buttonLogin);
}
@Override
public void showValidationErrorMsg()
{
Toast.makeText(this, "Username or Password is incorrect",
Toast.LENGTH_SHORT).show();
}
@Override
public void loginSuccessFully()
{
Toast.makeText(this, "Login SuccessFully",
Toast.LENGTH_SHORT).show();
}
@Override
public void loginFail()
{
Toast.makeText(this, "Something went wrong",
Toast.LENGTH_SHORT).show();
}
}
5. Conclusion:
In android, it is not easy to separate interface from logic but MVP design pattern
makes it easier to prevent the activities which may end up degrading into coupled
classes.
In big applicaitons, it is important to organize and manage the code which makes the
applications easy to maintain and extend.