Android项目重构之路:架构篇
来源:互联网 发布:淘宝卖家开通花呗要求 编辑:程序博客网 时间:2024/06/01 17:13
刚开始接手android项目时,发现该项目真的是一团糟。首先是其架构,是按功能模块进行划分的,本来按模块划分也挺好的,可是,他却分得太细,总共分为了17个模块,而好几个模块也就只有两三个类而已。但应用本身其实比较简单,要按功能模块来分的话,最多五个模块就够了。另外,有好多模块划分也很模糊,也有很多类按其功能其实可以属于多个模块的,也有些类定义不明确,做了不该做的事。
接口层
- PostEngine,请求引擎类,对请求的发送和响应结果进行处理;
- Response,响应类,封装了Http请求返回的数据结构;
- Api,接口类,定义了所有接口方法;
- ApiImpl,接口实现类,实现所有接口方法。
{"event": "0", "msg": "success"}{"event": "0", "msg": "success", "obj":{...}}{"event": "0", "msg": "success", "objList":[{...}, {...}], "currentPage": 1, "pageSize": 20, "maxCount": 2, "maxPage": 1}
public class Response<T> { private String event; private String msg; private T obj; private T objList; private int currentPage; private int pageSize; private int maxCount; private int maxPage; //getter和setter方法 ... }
public Response<Void> login(String loginName, String password);public Response<VersionInfo> getLastVersion();public Response<List<Coupon>> listNewCoupon(int currentPage, int pageSize);
@Overridepublic Response<Void> login(String loginName, String password) { try { String method = Api.LOGIN; List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("loginName", loginName)); params.add(new BasicNameValuePair("password", EncryptUtil.makeMD5(password))); TypeToken<Response<Void>> typeToken = new TypeToken<Response<Void>>(){}; return postEngine.specialHandle(method, params, typeToken); } catch (Exception e) { //异常处理 }}
核心层
public void getCustomer(String loginName, CallbackListener<Customer> callbackListener);
public interface CallbackListener<T> { /** * 请求的响应结果为成功时调用 * @param data 返回的数据 */ public void onSuccess(T data); /** * 请求的响应结果为失败时调用 * @param errorEvent 错误码 * @param message 错误信息 */ public void onFailure(String errorEvent, String message);}
- 参数检查,检查参数的合法性,包括非空检查、边界检查、有效性检查等;
- 使用异步任务调用接口层的Api,返回响应结果。
界面层
模型层
- 使用gson的@SerializedName标签,比如0为FALSE,1为TRUE,则可以如下定义:
public enum BooleanType { @SerializedName("0") FALSE, @SerializedName("1") TRUE}
- 通过定义一个value,如下:
public enum BooleanType { FALSE("0"), TRUE("1"); private String value; BooleanType(String value) { this.value = value; } public String getValue() { return value; }}
0 0
- ANDROID项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路(一):架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android 项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- 读《Android项目重构之路:架构篇》笔记
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Android项目重构之路:架构篇
- Jsoup数据抓取
- db2数据库 相关
- C将十六进制数字字符串转成数字
- Oracle存储过程之带有返回参数
- ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
- Android项目重构之路:架构篇
- nginx php环境搭建
- workerman性能测试
- 新下载kettle不能启动问题
- MFC 生成中英文版软件对应的工程属性设置
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
- Android异步消息处理机制详解及源码分析
- 异常处理和画板的保存
- java 文件预览之 DocConverter工具类 将office 文件转换为 swf