[Android] Nâng cấp và bảo trì phần mềm hiệu quả với mô hình MVP (Model - View - Presenter)

Đăng bởi: Admin | Lượt xem: 1202 | Chuyên mục: Android

Mô hình MVP trong Android (Model – View – Presenter) là một mô hình kiến trúc hướng giao diện người dùng giúp tách tầng trình diễn ra khỏi tầng dữ liệu. MVP Pattern trong Android mang lại lợi thế dễ dàng mở rộng một cách nhanh chóng, dễ dàng bảo trì và dễ dàng kiểm thử.


1. Mô hình MVP là gì?

Mô hình MVP trong Android giúp tách tầng trình diễn ra khỏi tầng dữ liệu, việc sử dụng MVP Pattern sẽ giúp dễ dàng mở rộng một cách nhanh chóng, dễ dàng bảo trì và dễ dàng kiểm thử ứng dụng.

2. Mô hình MVP bao gồm?

  • Model: phụ trách xử lý tầng dữ liệu có thể là các thực thể (Entities), API Services, SQLite, SharedPreferences, Realm Database, helpers…
  • View: phụ trách trình bày cách dữ liệu hiển thị, tiếp nhận tương tác từ người dùng sau đó gọi đến Presenter xử lý tương tác.
  • Presenter: phụ trách tiếp nhận các yêu cầu từ View sau gọi sự kiện xử lý tương ứng, có thể sẽ lấy dữ liệu từ Model và cuối cùng đẩy dữ liệu cho View hiển thị.

 3. Thiết kế mô hình MVP trong Android

Trong ứng dụng tra cứu thị trường chúng ta sẽ thiết kế mô hình MVP trong Android cụ thể như sau:

Bước 1: Đầu tiên bạn tạo lớp TyGiaView.java nhằm để hiển thị dữ liệu, lớp này sẽ được implement tại TyGiaActivity.

public interface TyGiaView {
 
    public void onComplete(TyGia tyGia);
 
    public void onError(String msg);
 
}

Bước 2: Tiếp theo bạn tao lớp TyGiaPresenter.java và TyGiaPresenterImpl.java sử dụng để xử lý các yêu cầu từ phía View, truy vấn dữ liệu từ Model và sau đó đẩy dữ liệu cho View hiển thị.

Lớp TyGiaPresenter.java như sau:

public interface TyGiaPresenter {
 
    public void loadData(String token);
 
}

Lớp TyGiaPresenterImpl.java như sau:

public class TyGiaPresenterImpl implements TyGiaPresenter{
 
    private TyGiaView tyGiaView;
    private ApiClient apiClient;
 
    public TyGiaPresenterImpl(TyGiaView tyGiaView) {
        this.tyGiaView = tyGiaView;
        this.apiClient = new ApiClient();
    }
 
    @Override
    public void loadData(String token) {
        Call<TyGia> call = apiClient.getClient().getListTyGiaNgoaiTe(token);
        call.enqueue(new Callback<TyGia>() {
            @Override
            public void onResponse(Call<TyGia> call, Response<TyGia> response) {
                if (response.body() != null) {
                    tyGiaView.onComplete(response.body());
                } else {
                    tyGiaView.onError("null");
                }
            }
 
            @Override
            public void onFailure(Call<TyGia> call, Throwable throwable) {
                tyGiaView.onError(throwable.getMessage().toString());
            }
        });
    }
 
}

Bước 3: Cuối cùng tại lớp TyGiaActivity.java bạn sẽ khởi tạo Presenter, gọi sự kiện tải dữ liệu và trình bày hiển thị dữ liệu lên màn hình.

public class TyGiaActivity extends AppCompatActivity implements TyGiaView {
 
    private Toolbar toolbar;
    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;
 
    private TyGia tyGia = null;
    private List<NgoaiTe> listNgoaiTe = null;
 
    private TyGiaPresenter tyGiaPresenter;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ty_gia);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
 
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
 
        tyGiaPresenter = new TyGiaPresenterImpl(this);
 
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefresh);
        swipeRefreshLayout.setColorSchemeResources(R.color.colorAccent);
        swipeRefreshLayout.setRefreshing(true);
 
        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.addItemDecoration(new DividerItemDecoration(getApplicationContext(), LinearLayoutManager.VERTICAL));
 
        swipeRefreshLayout.setOnRefreshListener(
                new SwipeRefreshLayout.OnRefreshListener() {
                    @Override
                    public void onRefresh() {
                        swipeRefreshLayout.setRefreshing(true);
                        tyGiaPresenter.loadData("teamvietdev.com");
                    }
                }
        );
 
        swipeRefreshLayout.setRefreshing(true);
        tyGiaPresenter.loadData("teamvietdev.com");
 
    }
 
    @Override
    public void onComplete(TyGia tyGia) {
        listNgoaiTe = tyGia.getDanh_sach_ngoai_te();
        toolbar.setTitle("NGOẠI TỆ (" + tyGia.getThoi_gian_tra_cuu() + ")");
        setSupportActionBar(toolbar);
        recyclerView.setAdapter(new TyGiaAdapter(listNgoaiTe));
        swipeRefreshLayout.setRefreshing(false);
    }
 
    @Override
    public void onError(String msg) {
        toolbar.setTitle("NGOẠI TỆ");
        setSupportActionBar(toolbar);
        listNgoaiTe = new ArrayList<>();
        recyclerView.setAdapter(new TyGiaAdapter(listNgoaiTe));
        swipeRefreshLayout.setRefreshing(false);
        Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
    }
 
}

Như vậy thông qua bài viết này, mình đã giới thiệu đến các bạn một cách cơ bản trong xây dựng phần mềm Android sử dụng mô hình MVP. Cảm ơn các bạn đã đọc.

vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!



Khóa học liên quan

Khóa học: Android

Học Kotlin cơ bản
Số bài học:
Lượt xem: 17611
Đăng bởi: Admin
Chuyên mục: Android

Học lập trình Flutter cơ bản
Số bài học:
Lượt xem: 58512
Đăng bởi: Admin
Chuyên mục: Android

Lập trình Android cơ bản
Số bài học:
Lượt xem: 22990
Đăng bởi: Admin
Chuyên mục: Android