android 寫程式時,可以用很多種分類的方法把程式分類,mvp架構是其中一種方法
這麼做的好處是更易於維護,並促進應用的可測試性、和可擴展性,常常一個改變不用全部改,可以只修改一處就好。
MVP架構分成三部分
這邊我練習了一個簡單的mvp架構的密碼登入程式
class先設好分三類跟一個管理介面接口的contract
我們創建一個class(MainContract)專門處理三個部分傳遞數值介面的接口
public interface MainContract {
interface view {
}
interface presenter {
}
interface modle{
}
}
介面裡放上各部分的functoin
使用Activity當作mvp架構中的viewpublic class MainActivity extends AppCompatActivity implements MainContract.view
宣告變數跟設定從presenter傳遞過來的值需要在view也設一個變數來接
private EditText account;
private EditText password;
private Button sent;
private Context context=this;
private MainPresenter presenter;
綁定物件
account=(EditText)findViewById(R.id.main_account_et);
password=(EditText) findViewById(R.id.main_password_et);
sent=(Button) findViewById(R.id.button);
presenter=new MainPresenter( this);
presenter方法設定在view的變數上
將輸入的帳號密碼傳給presnter
public void sentOnClick(View view){
presenter.getLoginData(account.getText().toString(),password.getText().toString());
}
接收view的值,並把自身丟到model去抓Model的帳密資料
private MainContract.view callBake;
private MainModle model;
public MainPresenter(MainContract.view view) {
this.callBake=view;
model = new MainModle(this);
}
這裡我還在presenter做帳密判斷正確的function,
@Override
public void getLoginData(String password, String account) {
if(password.equals("0000")&&account.equals("1111")) {
//到Modle拿取登入人員資料。
userName = model.getUserName();
//再傳回view,叫view更新畫面。
callBake.showUserName(userName);
}
else
callBake.loginError();
}
}
到model抓取帳密資料,若正確就丟回view的showUserName的function裡做顯示,若失敗就丟回view的loginError的function裡做顯示
因為帳號密碼在presenter就指定一組判斷了,所以這裡model只是抓presenter並傳回,並在view上的getUserName()回傳顯示
public class MainModle implements MainContract.modle {
private MainContract.presenter callBake;
public MainModle(MainContract.presenter presenter){
this.callBake=presenter;
}
@Override
public String getUserName(){
return "歡迎登入";
}
}