[架构]复杂App MVC重构小结
来源:互联网 发布:买家淘宝退款率高咋办 编辑:程序博客网 时间:2024/05/15 02:15
在公司做MVP重构,公司蛮大的,App也蛮复杂(显示逻辑上,业务转移上基本是用户操作驱动,而非业务逻辑驱动),所以是个大MVP,三端都非常臃肿。自然会用拆分来解决问题,同时参照了谷歌官方的架构模型。
Model
Model是数据层,该层是面向业务数据进行拆分的。安照SOLID思路,将Model拆成两层:
- 业务Model,这些Model承载着部分数据,以及面向这些数据的原子逻辑。但是,当涉及到持久化(服务端通信)时,需要通过Repo(见后)
- ModelGroup,简单的将子Model按类型进行组合,可以看做是对于组合哪些业务Model和如何持久化(针对Gson)的一个说明。其中的存储是Class->Object的Map,对外暴露一个通过Class获取Object的接口。从Repo层拿到的数据都是ModelGroup
View
此处主要是Passive View(xml),思想仍然是拆分,但要保证重用和对Presenter绑定的稳定:
- 子View,由定制化View、layout构成,是比复杂Fragment更小的View部分,绑定到单一的Presenter上(该Presenter可以按需拆分成更小的部分)
- ViewGroup,由粘合(摆放子layout的ViewGroup)和include子layout实现。会成为Activity/Fragment的根View,承载了一个完整的页面
Presenter
Presenter尽量简化对外接口(只有生命周期,分离关注),用以粘合View-Model。该层是面向显示和业务进行拆分的。后续可以比较简单的衍化到MVVM中的ViewModel。
- 子Presenter,负责一个子layout和一个业务Model的粘合,如果该layout需要多个Model,则由多个子Presenter实现(演化成VM时,需要用clean arch或者其他方案合并Presenter)。
- PresenterGroup,可以是Presenter或者Activity/Fragment,PresenterGroup持有的是ModelGroup和ViewGroup,主要负责将ModelGroup Convert到Model,并将子Presenter绑定到对应的View上
Converter
新增层,用以将ModelGroup在绑定时转换到子Presenter所需的Model。可以极大的提高子Presenter的重用能力,而且可以保证子Presenter的SOLID。
Repo
新增层,隔离持久化/服务端逻辑,并且包装了Model层转换的工作。同时,作为传递数据的核心,方便实现全局对同一Model的KVO。
职能表
A依赖B:A知道B的存在,有B的reference、new了B的实例或调用B的自定义构造方法。
A使用B:A依赖B,且调用了B的方法或访问了B的field。
阅读全文
0 0
- [架构]复杂App MVC重构小结
- app重构之架构
- Android app按三层架构+MVC整理(重构)代码可行吗
- android app架构设计mvc
- Sencha Touch App (MVC)开发小结
- 移动App设计之分层架构+MVC
- 移动App设计之分层架构+MVC
- APP开发实战48-MVC架构
- 机房重构小结
- 机房重构---小结
- 机房重构小结
- 代码重构小结
- Android App 的设计架构:MVC、MVP、MVVM与架构
- Android App的设计架构 MVC,MVP,MVVM与架构
- 系统架构重构
- Android架构重构
- 重构之复杂方法拆分
- WEBIM-UI重构小结
- Linux中hive无法使用Delete和Backspace删除键
- java.lang.LinkageError: loader constraint violation in interface itable initialization
- centos7下,intel-opencl-caffe安装中遇到的坑
- 我是一个Java class
- ztree树菜单控制展开到任意几级节点的实现方法
- [架构]复杂App MVC重构小结
- 201402 系统更新后 VS2010 的宏功能不能正常使用(如添加头注释)
- Linux 中 ssh host 代理配置及远程免密码登陆
- Android进程保活招式大全
- Oracle
- 关于swift(3.3) 链式编程的理解
- 大数据处理过程之核心技术ETL学习过程记录
- Opencv的reshape函数报错
- tensorflow笔记:模型的保存与训练过程可视化