以下是Keegan小钢大神原创博客:

Android项目重构之路:架构篇
Android项目重构之路:界面篇
Android项目重构之路:实现篇

看了这几篇文章,以及下面的评论,总结一下,以便以后拓展:

1、目前这个入门架构,model layer的稳定、一致、可靠性还是有保障的,model的数据是在接口层写入的,再从API传到数据层再传到界面层,中间也不会有丢失。确切地说,model layer的稳定、一致、可靠性是受制于API的,因为这个架构的model是跟API返回的json数据模型一致的。
2、为什么要抽出一个核心层,主要目的就是为了解耦activity,这跟MVP的思想是类似的。
3、data flow也是清晰的,从界面层,到核心层,最后到接口层,一条线下来,哪里出的问题是很容易定位的。

Q1:1、接口层的返回objList我觉得是多余了,多多少少包含了业务逻辑,有obj我觉得足够了

A1:1、首先obj和objList并不是我定义的,是我们的后台人员早定义好的;当然,如果由我来定义,我会更喜欢命名为data,那样显得更明了。

结果:

{"event": "0", "msg": "success", "obj":{...}}

1.AppAction层可以按模块继续细分。

2.Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化。

3.AsyncTask抽出

package com.lanhetech.core.user;

@doney 以下是我继承的类:

public abstract class NetworkTask extends AsyncTask {

    private CallbackListener callbackListener;
private KcuponResponse response;
private boolean isCancel = false; public NetworkTask(CallbackListener callbackListener) {
this.callbackListener = callbackListener;
} public void cancel() {
isCancel = true;
super.cancel(true);
} @Override
protected Void doInBackground(Void... params) {
response = run();
return null;
} @Override
protected void onPostExecute(Void result) {
if (callbackListener == null || response == null) {
return;
}
callbackListener.onFinish();
if (!isCancel) {
if (response.isSuccess()) {
T data = response.getObj();
if (data == null) {
data = response.getObjList();
}
callbackListener.onSuccess(data);
} else {
callbackListener.onFailure(response.getEvent(), response.getMsg());
}
}
} public abstract KcuponResponse run(); } // 调用时,代码就简单了,如下:
NetworkTask task = new NetworkTask(callbackListener) {
@Override
public KcuponResponse run() {
return api.loginByApp(phone, password, LOGIN_OS, imei);
}
};

4.每层都有自己相应的常量constance、工具类util、系统配置Config等。

5.ImageLoader应该是在UI层。
当你使用第三方库的时候,只要考虑你接入的地方即可,像ImageLoader,因为你用来加载图片的,就是UI层,其他不用怎么考虑。
如果你要自己实现图片加载,这时才需要考虑哪些放在UI层,哪些放在业务层,哪些放在数据层。

6.

Android 架构 4.总结的更多相关文章

  1. 一种更清晰的Android架构(转)

    一种更清晰的Android架构   一种更清晰的Android架构 原文链接 : Architecting Android…The clean way? 译者 : Mr.Simple & So ...

  2. Android架构分析之Android消息处理机制(二)

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本号:4.4.2 在上一篇文章中我们看了一个使用Handler处理Message消息的样例,本文我们 ...

  3. android学习——android架构

    android架构:在了解全局的情况下进行细致化的分析才能更有效的学习android的运行原理,才能更深刻的理解android开发: 1.架构图直观 2.架构详解 2.1.Linux Kernel 2 ...

  4. Android架构分析之使用自定义硬件抽象层(HAL)模块

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...

  5. Android架构设计和软硬整合完整训练

    Android架构设计和软硬整合完整训练 Android架构设计和软硬整合完整训练:HAL&Framework&Native Service&Android Service&a ...

  6. [Android 泥水匠] Android基础 之一:浅谈Android架构到HelloWorld案例的剖析

    作者:泥沙砖瓦浆木匠网站:http://blog.csdn.net/jeffli1993个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 365234583] ...

  7. Android架构初探

    #一 背景点评美团合并之后,业务需要整合,我们部门的几条业务需要往美团平台迁移,为了降低迁移成本,开发和维护成本,以及将来可能要做的单元测试,需要对架构进行相应的调整.之前的代码都堆在Activity ...

  8. 一个Android 架构师的成长之路

    前言 总所周知,当下流行的编程语言有Java.PHP.C.C++.Python.Go等.其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词.Java ...

  9. Android架构组件——ViewModel

    概述 ViewModel,从字面上理解的话,它肯定是跟视图(View)以及数据(Model)相关的.正像它字面意思一样,它是负责准备和管理和UI组件(Fragment/Activity)相关的数据类, ...

  10. Android架构(一)MVP架构在Android中的实践

    Android架构(一)MVP架构在Android中的实践 https://www.300168.com/yidong/show-2790.html   核心提示:为什么要重视程序的架构设计 对程序进 ...

随机推荐

  1. 栈与递归的实现(Hanoi塔问题等等)

    函数中有直接或间接地调用自身函数的语句,这样的函数称为递归函数.递归函数用 得好,可简化编程工作.但函数自己调用自己,有可能造成死循环.为了避免死循环,要 做到两点: (1) 降阶.递归函数虽然调用自 ...

  2. Spring Framework框架解析(1)- 从图书馆示例来看xml文件的加载过程

    引言 这个系列是我阅读Spring源码后的一个总结,会从Spring Framework框架的整体结构进行分析,不会先入为主的讲解IOC或者AOP的原理,如果读者有使用Spring的经验再好不过.鉴于 ...

  3. struts2和jstl有关循环的写法

    一:前言 其实觉得自己现在就是个码农啊,对于struts2的标签和jstl的标签我一直都是只会用,但是觉得自己老是会混淆这种概念性的问题.所以我自己在代码里面就试着用了几种方式,实现同一种效果,下面就 ...

  4. HDU1016 素数环---(dfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=1016 Sample Input 6 8   Sample Output Case 1: 1 4 3 2 5 6 ...

  5. 最短路算法详解(Dijkstra,Floyd)

    最短路径 在一个无权的图中,若从一个顶点到另一个顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1.由于从一个顶点到另一个顶点可能存在着多条路径,每条路径上所经过 ...

  6. swoole扩展安装

    1Swoole扩展的编译安装 Swoole扩展是按照php标准扩展构建的.使用phpize来生成php编译配置,./configure来做编译配置检测,make和make install来完成安装. ...

  7. python 复习 4-1 函数、参数、返回值、递归

    函数 完成特定功能的一个语句组,这个语句组可以作为一个单位使用,并且给它组语句取一个名子,即函数名 可以通过函数名在程序不同地方多次执行,即函数调用 预定义函数(可以直接使用) 自定义函数(自编写的) ...

  8. 《Java编程思想》笔记 第十一章 持有对象

    1.保存对象引用 1.数组,数组具有固定大小 2.容器类,可自动调节大小 2.容器类 List  Set  Queue  Map 及常用的实现类 2.1 Collection (接口) 保存独立的元素 ...

  9. Android6.0获取运行时权限

    照着<第一行代码>打代码,然并卵,感叹技术进步的神速.最后提醒一点:IT类的书籍一定要注意出版时间!出版时间!出版时间!重要的事情说三遍 问题出在android6.0的权限获取问题上,以前 ...

  10. NumPy、SciPy 等Python包在Windows下的whl安装包下载

    http://www.lfd.uci.edu/~gohlke/pythonlibs/ 感谢加利福尼亚大学尔湾分校(University of California, Irvine)荧光动力实验室(瞎翻 ...