欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:【Android】MVP架構(gòu)

柚子快報邀請碼778899分享:【Android】MVP架構(gòu)

http://yzkb.51969.com/

MVP架構(gòu)簡介

MVP(Model-View-Presenter)是一種常見的軟件架構(gòu)模式,尤其在Android應(yīng)用開發(fā)中被廣泛使用。它將應(yīng)用程序分為三層:Model、View 和 Presenter,以實現(xiàn)職責(zé)分離,提高代碼的可維護(hù)性和可測試性。

1. Model(模型)

定義:負(fù)責(zé)處理應(yīng)用程序的數(shù)據(jù)邏輯,包括與數(shù)據(jù)庫、網(wǎng)絡(luò)、API等數(shù)據(jù)源的交互。職責(zé):提供數(shù)據(jù),并將其返回給 Presenter,不涉及任何UI相關(guān)邏輯。

2. View(視圖)

定義:負(fù)責(zé)展示用戶界面,接收用戶的輸入并將其傳遞給 Presenter。職責(zé):展示由 Presenter 提供的數(shù)據(jù),并根據(jù)用戶操作調(diào)用 Presenter 的方法。View 層不直接處理邏輯,只展示內(nèi)容。

3. Presenter(演示者)

定義:作為 View 和 Model 之間的橋梁,負(fù)責(zé)處理邏輯和協(xié)調(diào)數(shù)據(jù)流。職責(zé):

從 View 接收用戶輸入,調(diào)用 Model 獲取數(shù)據(jù)。將數(shù)據(jù)處理結(jié)果返回給 View 以更新UI。Presenter 不直接操作UI,而是通過接口與 View 進(jìn)行交互。

MVP與MVC的區(qū)別

1. 核心組成部分的區(qū)別

MVP:

Model:負(fù)責(zé)數(shù)據(jù)邏輯的處理,類似于MVC中的Model。View:展示數(shù)據(jù)、處理用戶界面交互,但不會直接處理業(yè)務(wù)邏輯,所有邏輯都交給 Presenter。Presenter:作為中間層,負(fù)責(zé)從 Model 獲取數(shù)據(jù)并處理業(yè)務(wù)邏輯,然后將數(shù)據(jù)傳遞給 View。Presenter 直接與 View 交互。 MVC:

Model:同樣負(fù)責(zé)數(shù)據(jù)邏輯的處理,與 MVP 中的 Model 類似。View:展示數(shù)據(jù)并處理用戶輸入,但可以直接與 Controller 進(jìn)行交互。Controller:控制器響應(yīng)用戶的輸入,更新 Model 和 View,但它不直接操作 View,而是通知 View 自行更新。

2. 交互方式的區(qū)別

MVP:

View 與 Model 之間沒有直接交互。View 只負(fù)責(zé)調(diào)用 Presenter,Presenter 是唯一能與 Model 交互的部分,然后 Presenter 將結(jié)果返回給 View 來更新界面。雙向交互:View 和 Presenter 是雙向交互的,View 可以調(diào)用 Presenter,Presenter 也可以調(diào)用 View 來更新UI。 MVC:

View 可以直接與 Model 交互。在MVC中,View可以直接從Model中獲取數(shù)據(jù),雖然一般情況下是通過Controller來協(xié)調(diào)。單向交互:View 和 Controller 之間的交互通常是單向的,用戶的輸入會通過 View 傳遞給 Controller,Controller 再更新 Model,最后通知 View 更新UI。

3. 視圖的控制權(quán)

MVP:

Presenter 控制視圖:在MVP模式中,Presenter 負(fù)責(zé)處理所有業(yè)務(wù)邏輯,并決定何時以及如何更新 View。View 不進(jìn)行邏輯處理,只是被動地展示數(shù)據(jù)。 MVC:

Controller 充當(dāng)中介:在MVC中,Controller 只是起到協(xié)調(diào)作用,它不會主動控制 View 的更新,通常會將新的數(shù)據(jù)傳遞給 View 或通知 View 進(jìn)行自我更新。

MVP架構(gòu)優(yōu)點

View層與Model層完全分離 所有View層 和 Model層 邏輯交互都在Presenter 后續(xù)擴(kuò)展性/可維護(hù)性強(qiáng),M層(負(fù)責(zé)數(shù)據(jù)業(yè)務(wù)模型), P層(負(fù)責(zé)M層與V層的交互邏輯) 定位修改Bug方便: 如果是修改界面交互相關(guān)的,直接找V層修改 如果是修改數(shù)據(jù)業(yè)務(wù)邏輯,直接找M層修改

MVP架構(gòu)特點

關(guān)系:

View收到用戶的操作 View把用戶的操作,交給Presenter Presenter直接操作Model進(jìn)行業(yè)務(wù)邏輯處理 Model處理完畢后,通知Presenter Presneter收到通知后,在去更新View

方式:

是雙向的通信方式

優(yōu)點:

View層與Model層完全分離所有的邏輯交互都在PresenterMVP分層較為嚴(yán)謹(jǐn)

示例

Model (數(shù)據(jù)層)

Model 負(fù)責(zé)處理數(shù)據(jù)邏輯,判斷用戶名和密碼是否正確。

public class LoginModel {

// 模擬用戶登錄數(shù)據(jù)

public boolean validateUser(String username, String password) {

// 簡單模擬,假設(shè)用戶名為"user",密碼為"password"時登錄成功

return username.equals("user") && password.equals("password");

}

}

View (視圖層)

View 負(fù)責(zé)顯示界面,并將用戶的輸入傳遞給 Presenter,它不會直接處理業(yè)務(wù)邏輯。

public interface LoginView {

// 展示登錄成功的信息

void showLoginSuccess();

// 展示登錄失敗的信息

void showLoginError();

// 獲取用戶名

String getUsername();

// 獲取密碼

String getPassword();

}

具體實現(xiàn):

public class LoginActivity extends AppCompatActivity implements LoginView {

private EditText usernameEditText, passwordEditText;

private Button loginButton;

private LoginPresenter presenter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

usernameEditText = findViewById(R.id.username);

passwordEditText = findViewById(R.id.password);

loginButton = findViewById(R.id.login_button);

presenter = new LoginPresenter(this, new LoginModel());

loginButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

presenter.onLoginClicked();

}

});

}

@Override

public void showLoginSuccess() {

Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();

}

@Override

public void showLoginError() {

Toast.makeText(this, "登錄失敗", Toast.LENGTH_SHORT).show();

}

@Override

public String getUsername() {

return usernameEditText.getText().toString();

}

@Override

public String getPassword() {

return passwordEditText.getText().toString();

}

}

Presenter (邏輯層)

Presenter 負(fù)責(zé)處理業(yè)務(wù)邏輯,并將數(shù)據(jù)從 Model 傳遞到 View。

public class LoginPresenter {

private LoginView view;

private LoginModel model;

public LoginPresenter(LoginView view, LoginModel model) {

this.view = view;

this.model = model;

}

// 當(dāng)用戶點擊登錄按鈕時調(diào)用

public void onLoginClicked() {

String username = view.getUsername();

String password = view.getPassword();

// 通過 Model 驗證用戶輸入

if (model.validateUser(username, password)) {

view.showLoginSuccess();

} else {

view.showLoginError();

}

}

}

布局文件 (activity_login.xml)

簡單的登錄界面,包含輸入框和按鈕。

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:padding="16dp">

android:id="@+id/username"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="用戶名" />

android:id="@+id/password"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="密碼"

android:inputType="textPassword" />

android:id="@+id/login_button"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="登錄" />

工作流程:

用戶在 LoginActivity 中輸入用戶名和密碼并點擊登錄按鈕。LoginActivity 作為 View 層,將用戶輸入傳遞給 LoginPresenter。LoginPresenter 從 View 獲取用戶名和密碼,并調(diào)用 LoginModel 來驗證用戶輸入。LoginModel 驗證輸入是否正確,然后將結(jié)果返回給 LoginPresenter。LoginPresenter 根據(jù)驗證結(jié)果通知 LoginActivity 更新UI,顯示登錄成功或失敗的消息。

已經(jīng)到底啦?。?/p>

柚子快報邀請碼778899分享:【Android】MVP架構(gòu)

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19615163.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄