iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0

今天講解的 MVC 和 MVP 是兩種常見的軟體設計架構。當你的程式碼過於龐大或過於複雜時,這些架構可以有效提升代碼的可維護性和模組化。透過將業務邏輯和視圖邏輯進行明確分離,這些架構能讓你的代碼變得更加清晰可讀,並在開發過程中保持高效、易於管理與擴展。

MVC架構
M: 負責處理資料邏輯的相關事情
V: 負責顯示介面的相關事情
C: M和V之間溝通的橋樑,可以直接和 M 以及 V 互動。

MVP架構
M: 負責處理資料邏輯的相關事情
V: 負責顯示介面的相關事情
P: 作為 V 和 M 之間的橋樑,以及邏輯判斷。

我這麼說明,有可能不好理解,我直接用範例說明給你們看:

範例
我們的MainActivity他是代表我們的V,當在V這邊輸入帳號密碼,點擊登入,就會抓取帳號密碼丟給P去做邏輯判斷
MainActivity.Java

public class MainActivity extends AppCompatActivity implements Contract.View {

    private EditText account;
    private EditText password;
    private Button sent;
    private Context context = this;
    private Presenter presenter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        account = (EditText) findViewById(R.id.editTextTextPersonName);
        password = (EditText) findViewById(R.id.editTextTextPassword);
        sent = (Button) findViewById(R.id.button);
        presenter = new Presenter(this);

        sent.setOnClickListener(new View.OnClickListener() {
            /*增加點擊事件*/
            @Override
            public void onClick(View view) {
                presenter.getLoginData(account.getText().toString(),password.getText().toString());
                /*當按下送出按鈕時,會抓取帳號和密碼丟給Presenter判斷*/
            }
        });

    }
    @Override
    public void loginError(){
        Toast.makeText(context,"帳密錯誤",Toast.LENGTH_SHORT).show();
    }
    /*當Presenter判斷帳號或密碼錯誤呼叫此處*/

    @Override
    public void showUserName(String userName){
        Toast.makeText(context,"歡迎登入" + userName,Toast.LENGTH_SHORT).show();

    }
    /*當Presenter判斷帳號或密碼正確呼叫此處*/
}

https://ithelp.ithome.com.tw/upload/images/20241007/201688057R2PPiePq7.png

當Presenter接收到V丟過來帳號密碼,進行判斷,判斷帳號密碼輸入正確會到M,先拿取資料後,在將全部資料再傳回給V,顯示歡迎登入,當判斷帳號密碼輸入不正確,就會直接回到V,顯示帳密錯誤。
Presenter.Java

public class Presenter implements Contract.presenter{
    private Contract.View callback;
    private String userName;
    private Model model;
    public Presenter(Contract.View view){
        this.callback = view;
        /*接收view丟過來資訊*/
        model = new Model(this);
    }
    @Override
    public void getLoginData(String password , String account){

       if (account.equals("0000") && password.equals("1111")){
           userName = model.getUserName();
           callback.showUserName(userName);
       }
       else
           callback.loginError();
    }
}

當Presenter在判斷帳號密碼輸入正確後,會到Model抓取使用者資料,一起傳回給V顯示

public class Model implements Contract.model{

    private Contract.presenter callback;
    public Model(Contract.presenter presenter){
        this.callback = presenter ;
    }
    @Override
    public String getUserName(){
        return "Lin"; //使用者資料
    }
}

以上是我 MVP、MVC 架構的介紹
顯示成果
登入失敗畫面

登入成功畫面


上一篇
# Day 28 天氣API(下)
下一篇
# Day 30 學習計畫總結
系列文
當Java遇見Android,30天學習指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言