app重构之架构
2015-12-04 14:54
253 查看
历史
我们的app经历了一次重构,在重构过程中将IDE切换到Android Studio,并且编译脚本从Ant切换到了Gradle。不介绍IDE和Gradle的优势,主要介绍重构后app的Architecture相关部分。
从0到1是一个开始,再从1到N又是另一个开始。
Architecture
当前我们的结构主要为4层:app
core
lib
model
app依赖core,而core依赖lib和model。随着以后的业务发展、产品迭代或者有更好的结构划分,会再做调整。
app——展现层(presention)
用于页面展现,主要包含MVP模式中的VP。我们对V采用接口的方式去定义,然后让Activity或者Fragment去实现V接口,这样我们就达到接口编程的目的,P只需要关注V接口即可。以注册中的地区列表页面为例V
/** * 地区view,MVP-V */ public interface IRegionView { /** * 搜索更新 */ void search2Update(); }
P
/** * 国家地区,MVP-P */ public class RegionPresenter { private List<Region> mRegions = OFRRegionHelper.getRegions(); /** * 获取地区列表 * * @return */ public List<Region> getRegions() { return mRegions; } /** * 搜索 * * @param regionView * @param searchRegion */ public void search(@NonNull IRegionView regionView, String searchRegion) { mRegions.clear(); if (TextUtils.isEmpty(searchRegion)) { mRegions.addAll(OFRRegionHelper.getRegions()); } else { mRegions.addAll(OFRRegionHelper.searchRegions(searchRegion)); } regionView.search2Update(); } }
另外,我们的app有太多的业务逻辑,所以我们也使用了比较多的策略模式,方便以后的扩展和维护。比如不同的国家,它在意向单展现时就有不同的表现:
可以同时选择的最多意向单数量
每个学校可以同时选择的最多专业数量
意向单名字
于是,我们就对此采用了策略模式
国家意向单策略接口
/** * 国家策略 * <ul> * <li>不同国家可选的意向单数量不同,具体见{@link #maxCount2Select()}</li> * <li>不同国家的学校专业可选数量不同,具体见{@link #maxCountOfPerSchool2Select()}</li> * </ul> */ public interface ICountryPurpose { /** * 国家可以同时选择的最多意向单数量 * * @return */ int maxCount2Select(); /** * 每个学校可以同时选择的最多专业数量 * * @return */ int maxCountOfPerSchool2Select(); /** * 意向单名字,目前可用名字为: * <ol> * <li>专业</li> * <li>入学时间,当前只限日本</> * </ol> * * @param ctx * @return */ String getName(@NonNull Context ctx); }
core
核心层,主要用于应用相关的URL拼接、图片加载、网络请求、json解析、第三方平台、配置和工具。lib
通用库层,不依赖于应用的任何业务,方便快速的移植到其它项目.model
数据层,作为MVP的M,用于应用的数据模型.相关文章推荐
- JSON 递归遍历算法(IOS)
- Android Studio Mac版快捷键
- 方法:怎么用ionic命令行调试你的ionic app
- Android触控-MotionEvent(一)
- iOS-技巧性总结
- iOS-Objective-C内存管理
- Android设计模式(五岁以下儿童)--简单工厂模式
- android(9)(使用pull解析xml文件)
- app多少钱,开发一款app到底多少钱合适,开发一款APP应用大概需要多少钱
- android 输入框EditText禁止输入Emoji表情符
- Fast detection of multiple objects in traffic scenes with a common detection framework
- android Application类的详细介绍
- Android tips(二)-->Android比较有用的方法总结
- ios 防止按钮快速点击造成多次响应的避免方法。
- android:gravity和android:layout_Gravity属性
- Android 异常- android.content.ActivityNotFoundException:
- iOS 属性传值 --从一级页面传到三级页面
- iOS应用程序打包
- unity NGUI Tutorial Tools
- 如何在ViewController中使用AppDelegate