总结mvp的使用:
![](https://img.haomeiwen.com/i1896391/76126ceb4507c8f6.png)
项目的目录结构data和main是主要的,base中的BasePresenter和BaseView提取了共用内容以及做出了最基本的规范。
在实际开发中,data和main两个目录可有不同的人来同事开发,互不影响,前提是定义好接口规则。
先看main下面的:
MainContract中定义了View和Presenter接口:
![](https://img.haomeiwen.com/i1896391/e919fa499cdc3aa7.png)
MainFragment实现了MainContract中的View接口:
![](https://img.haomeiwen.com/i1896391/5211cc4851cccfa6.png)
MainPresenter实现了MainContract中的Presenter接口:
![](https://img.haomeiwen.com/i1896391/689822a4facd6197.png)
在MainPresenter里面构造函数传递了View和ShareRepository,这个也很好理解,Presenter里面处理完逻辑后需要调用View和Data。再则就是View有时候也需要Presenter,比如:当有账号密码输入后点击登录时,这时候就需要调用Presenter的方法。
MainAy实现了data、view、presenter的绑定:
![](https://img.haomeiwen.com/i1896391/cacfd18c50994c71.png)
接下来是data部分
目录结构:
![](https://img.haomeiwen.com/i1896391/84468a92f58b6d4a.png)
ShareDataSource为接口定义。ShareLocalDataSource、ShareRemoteSource、ShareDataRepository均实现了此接口。
local为本地数据模型,remote为网络数据模型,而ShareRepository为两则的逻辑综合,在这里判断调用本地还是网络、数据缓存等,这里面主要是对数据的操作。
总结
实际上并非所有的逻辑都在Presenter中,我的理解是MainFragment是内容区域,但是比如标题栏,左滑栏这些还是属于Activity,因为这些地方一般都是跳转区域,当然具体情况具体调整。 在data中Source为数据来源,即本地还是网络,而Repository为来源的综合,这里面加上了本地、网络的逻辑。
也就是说,Activity为功能的初始化、拼凑,Fragment为View的显示,Presenter为逻辑部分,data为数据的处理(缓存、请求等)。
再者实际上data下可以以一个大的功能划分,而非按界面来做。当然如果一个界面本身就非常简单的话也没必要追求拆分。
网友评论