MVP快速集成框架
MVP快速集成框架
原理图
Java类及包路径解释
com.jz.appframe.behavior
behavior路径下定义每个视图(Activity)的请求行为和响应行为,内部对应到每一个方法
com.jz.appframe.data
app数据处理package,其中DataManager是网络接口的再次封装,local是本地数据集合,remote是远端响应的数据集合,net是网络底层封装
com.jz.presen
presenter集合,presenter使用专门的工程类PresenterFactory统一创建,绑定到每个Activity
ui
Activity集合
泛型与接口
框架使用了很多泛型,主要是用于Presenter和Activity的快速绑定和减少暴露方法,大量接口用于PV层解耦
使用步骤
- 定义行为
public interface LoginBehavior {
//动作发起
interface LoginAction extends PresenterView<LoginView> {
void login(String username, String passwd);
}
//动作响应
interface LoginView extends CommView{
void loginSuccess(String msg);
}
}
- 定义View层
public class LoginActivity extends BaseActivity<LoginBehavior.LoginAction> implements LoginBehavior.LoginView {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
showMessage(getStringValueFromLast("data", "null"));
}
@OnClick({R.id.btn_login})
public void onClick(View view){
int id = view.getId();
switch (id){
case R.id.btn_login:
getPresenter().login("1212", "password");
}
}
@Override
public void loginSuccess(String msg) {
showMessage("login success" + msg);
}
//提供Activity的布局
@Override
protected int layout() {
return R.layout.activity_login;
}
//提供presenter
@Override
protected LoginBehavior.LoginAction provideP() {
return getMyApp().getPresenterFactory().createLoginPresenter();
}
//pv绑定
@Override
protected void onAttach() {
getPresenter().attach(this);
}
//pv解绑
@Override
protected void onDetach() {
getPresenter().detach();
}
}
其中返修loginAction是标明presenter的类型,必须重写BaseActivity的四个方法,解释如注释;另外 为了方便Activity集中管理,使用ActFactory类集中生产new
- 定义Presenter
public class LoginPresenter extends BasePresenter<LoginBehavior.LoginView>
implements LoginBehavior.LoginAction{
public LoginPresenter(DataManager dataManager) {
super(dataManager);
}
@Override
public void login(String username, String passwd) {
Disposable disposable = dataManager.login(username, passwd)
.subscribeOn(Schedulers.io())
.compose(RxTransformHelper.<LoginResponse>ioMainProgress(getView(), "加载中", false))
.observeOn(AndroidSchedulers.mainThread())
.compose(RxTransformHelper.<LoginResponse>ioMainException(getView()))
.subscribe(new Consumer<LoginResponse>() {
@Override
public void accept(LoginResponse loginResponse) throws Exception {
getView().loginSuccess(loginResponse.getMessage());
}
});
disposableRaiser.add(disposable);
}
}
RxTransformHelper主要是帮忙处理状态显示、异常处理;Presenter也用工厂统一生产PresenterFactory
- 底层网络连接、其他一些小的工具类,详细键代码,如Activity的跳转
private void gotoLogin(){
new ActBuilder().setSrc(this)
.setStringValue("data", "jump to login page")
.setTarget(Config.ACT_LOGIN)
.toAct(true);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】