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