MVP架构梳理
一、概念解释
MVP 是一种将界面逻辑(View)与业务逻辑(Presenter)和数据逻辑(Model)分离的架构,通过接口解耦,使得代码更易于维护、测试和扩展。
com.example.mvpapp
 │
 ├── model
 │   └── LoginModel.java
 │
 ├── view
 │   ├── LoginView.java  (接口)
 │   └── LoginActivity.java
 │
 ├── presenter
 │   └── LoginPresenter.java
 │
 └── MainActivity.java (可选跳转页)
View(视图层)
-  职责:界面显示 + 用户交互事件监听。 
-  不能做逻辑处理,也不直接访问数据。 
-  通过调用 Presenter来触发业务逻辑(如登录、拉数据)。
-  提供接口(如 onLoginSuccess())供Presenter调用,返回结果并更新 UI。
Presenter(表示层/桥梁层)
-  职责:控制器角色,处理所有的业务逻辑。 
-  连接 View 和 Model: -  从 View 获取用户输入; 
-  调用 Model 获取数据; 
-  处理完数据后,再调用 View 接口更新界面。 
 
-  
-  完全不涉及 UI 控件,只调用 View 暴露的接口。 
Model(数据层)
-  职责:接收来自 Presenter 的请求,处理数据逻辑,并将结果返回给 Presenter。 
- 提供数据访问接口(如数据库操作、网络请求等)
数据流向:
- 用户操作流:用户通过View进行操作 → View将操作委托给Presenter → Presenter处理逻辑并操作Model
- 数据更新流:Model数据变化 → Presenter获取新数据 → Presenter更新View显示
二、MVP 使用流程(以登录为例)
-  用户点击“登录” → View捕获点击事件;
-  View调用Presenter.login(username, password);
-  Presenter接收参数,调用Model执行登录逻辑;
-  Model返回结果:-  如果是同步:立即返回结果给 Presenter;
-  如果是异步(如网络请求):通过接口回调 Presenter;
 
-  
-  Presenter获取结果后,调用View提供的接口,更新界面。
        
三、三者关系
| 方向 | 类型 | 说明 | 
|---|---|---|
| View → Presenter | 强依赖 | View 持有 Presenter 实例,主动调用业务方法 | 
| Presenter → View | 接口依赖 | Presenter 持有view的接口引用 | 
| Presenter → Model | 强依赖 | Presenter 调用 Model 实列 | 
| Model → Presenter | 接口回调 | Model 在异步场景下通过接口回调通知 Presenter,但 Model 持有的是一个 Callback 接口,不是具体的 Presenter 类 | 
