• Android 架构 4.总结


    以下是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);
            }
        };    
    View Code

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

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

    6.

  • 相关阅读:
    外键的三种形式
    MySQl创建用户和授权
    Django模板系统
    Django 简介
    jQuery
    JavaScript的BOM和DOM
    JS中的关键字和保留字
    Git 源码管理工具简单入门
    Git使用
    常见的三种SQL分页方式
  • 原文地址:https://www.cnblogs.com/H-BolinBlog/p/5975356.html
Copyright © 2020-2023  润新知