Xamarin.Android MVP模式

來源:互聯網
上載者:User

標籤:

一、簡介

隨著UI建立技術的功能日益增強,UI層也履行著越來越多的職責。為了更好地細分視圖(View)與模型(Model)的功能,讓View專註於處理數 據的可視化以及與使用者的互動,同時讓Model只關係資料的處理,基於MVC概念的MVP(Model-View-Presenter)模式應運而生。

在MVP模式裡通常包含4個要素:

    View:負責繪製UI元素、與使用者進行互動(在Android中體現為Activity);    View interface:需要View實現的介面,View通過View interface與Presenter進行互動,降低耦合,方便進行單元測試;    Model:負責儲存、檢索、操縱資料(有時也實現一個Model interface用來降低耦合);     Presenter:作為View與Model互動的中間紐帶,處理與使用者互動的負責邏輯。所謂的MVP,即是(model-處理商務邏輯(主要是資料讀寫,或者與後台通訊(其實也是讀寫資料)),view-處理ui控制項,presenter-主導器,操作model和view)二、執行個體

1.建立一個項目,項目結構如下

 

2.做一個根據id讀取資料的執行個體,介面如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:id="@+id/id"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="輸入id"        android:inputType="number" />    <EditText        android:id="@+id/first"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="inter first name"        android:inputType="text" />    <EditText        android:id="@+id/last"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="inter last name"        android:inputType="text" />    <Button        android:id="@+id/save"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="save" />    <Button        android:id="@+id/load"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="load" /></LinearLayout>
View Code

3.建立bean

 public class UserBean    {        private String mFirstName { get; set; }        private String mLastName { get; set; }                  public UserBean(String firstName, String lastName)        {            this.mFirstName = firstName;            this.mLastName = lastName;        }    }

4.建立model(處理商務邏輯),先寫介面,後寫實現

    public interface IUserModel    {        void SetID(int id);        void SetFirstName(String firstName);        void SetLastName(String lastName);        int GetID();        UserBean Load(int id);// 通過id讀取user資訊,返回一個UserBean    }
 public class UserModel : IUserModel    {        public int GetID()        {            return 0;        }        public UserBean Load(int id)        {            // 查資料庫或者連網擷取id的userbean            return new UserBean("11", "22");        }        public void SetFirstName(string firstName)        {        }        public void SetID(int id)        {        }        public void SetLastName(string lastName)        {        }    }

 

5.建立view(更新ui中view狀態),這裡列出需要操作當前view的方法,也就是介面。

    public interface IUserView    {        int GetID();        String GetFristName();        String GetLastName();        void SetFirstName(String firstName);        void SetLastName(String lastName);    }

6.建立presenter(主導器,通過ivew和imodel介面操作model和view),activity可以把所有邏輯給presenter處理

 

 public class UserPresenter    {        private IUserView mUserView;        private IUserModel mUserModel;        public UserPresenter(IUserView view)        {            mUserView = view;            mUserModel = new UserModel();        }        public void SaveUser(int id, String firstName, String lastName)        {            mUserModel.SetID(id);            mUserModel.SetFirstName(firstName);            mUserModel.SetLastName(lastName);        }        public void LoadUser(int id)        {            UserBean user = mUserModel.Load(id);            mUserView.SetFirstName(user.mFirstName); // 通過調用IUserView的方法來更新顯示            mUserView.SetLastName(user.mLastName);        }    }

7.activity中實現iview介面,在其中操作view,執行個體化一個presenter變數。

 public class MainActivity : Activity, IUserView, View.IOnClickListener    {        UserPresenter presenter;        EditText id, first, last;        protected override void OnCreate(Bundle bundle)        {            base.OnCreate(bundle);            // Set our view from the "main" layout resource            SetContentView(Resource.Layout.Main);            // Get our button from the layout resource,            // and attach an event to it             FindViewById<Button>(Resource.Id.save).SetOnClickListener(this);             FindViewById<Button>(Resource.Id.load).SetOnClickListener(this); ;                        id = FindViewById<EditText>(Resource.Id.id);            first = FindViewById<EditText>(Resource.Id.first);            last = FindViewById<EditText>(Resource.Id.last);            presenter = new UserPresenter(this);        }        public int GetID()        {            return Convert.ToInt32(id.Text.ToString());        }        public string GetFristName()        {            return first.Text.ToString();        }        public string GetLastName()        {            return last.Text.ToString();        }        public void SetFirstName(string firstName)        {            first.Text = firstName;        }        public void SetLastName(string lastName)        {            last.Text = lastName;        }        public void OnClick(View v)        {            switch (v.Id)            {                case Resource.Id.save:                    presenter.SaveUser(GetID(), GetFristName(), GetLastName());                    break;                case Resource.Id.load:                    presenter.LoadUser(GetID());                    break;            }        }    }

7.源碼地址

 https://github.com/huguodong/XamarinMVP 

裡面又更詳細的執行個體

Xamarin.Android MVP模式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.