Hello MVP !

Hi!
Bài này chỉ nhằm mục đich giới thiệu cho các bạn về MVP, mình nghĩ cách đơn giản nhất là làm 1 sample "Hello MVP" !

Mô hình MVP - Model View Presenter (Not MVC - Model View Controller)



Có thể hiểu mô hình trên như sau:
* View chứa một cài đặt của Presenter (Tức là View biết Presenter)
* Presenter chỉ là Class thể thực hiện các truy vấn logic xuống Model và nhận kết quả từ Model

* Presenter cập nhật cho View qua một Interface của View
* View không biết (mù tịt) về Model.

Mô hình này gọi là MVP Passive View

File View : HelloMVP.aspx


File View : HelloMVP.aspx.cs

Ở đây ta có 2 vùng cần lưu ý
* Vùng 1: là phần Implement Interface IViewHelloMVP
* Vùng 2: Là phần khai báo 1 presenter.
Bạn hãy chú ý phần mô hình MVP thì sẽ thấy rằng lơp View không là gì hết, đúng theo nghĩa của nó là chỉ để thể hiện, phần làm việc chính là phần Presenter nó nhận các thao tác từ View và cập nhật lại View thông qua một Interface của View là : IViewHelloMVP

Hãy chú ý :

presenter.Say();

Khi user click lên button Say thì View se gọi presenter thực hiện nhiêm vụ tương ứng

File Interface : IViewHelloMVP.cs



vì phần UI chúng ta có 1 textbox để nhập vào và một cái label để hiển thị kết quả. Không có bất cứ event nào trong Interface này.

Các Event sẽ được Presenter đảm nhận

File Presenter : PresenterHelloMVP.cs



Từ mô hình MVP ta thấy Presenter năm giữa View và Model. Trong Class này chúng ta khai báo 2 interface là :

private IViewHelloMVP viewMVP;
private IDataSourceMVPHello dataMVP;

Mục đích là để thao tác với Model và View. Trong ví dụ này tôi không làm phần thao tác với Model để phần này cho Post sau.

Vậy thì Presenter sẽ update view qua viewMVP
Băng function

public void Say()
{
viewMVP.Msg = "Hello " + viewMVP.Name;
}

OK ! vậy là về cơ bản các bạn đã thấy View và Presenter làm việc với nhau còn Preseneter với Model thì xin hẹn các bạn 1 bài khác.

Comments

Anonymous said…
cảm ơn bài viết.bài viết của bạn rất hay.

Popular posts from this blog

How to search and HighLight !

What's ViewState? How does use?