随笔分类 - 架构
摘要:如果一个列表数据是分页加载的, 就需要分页合并,即每次拉取新的一页时,将新到的一页数据合并到之前的列表数据中。 这个可以是很简单的,比如数据结构是这样的: data { list: [] } Merge方法极其简单,直接将新一页数据addAll到本地的列表数据结构中。 但如果这个接口除了接口数据还捎
阅读全文
摘要:App进入页面请求服务器,在数据返回之前,没什么给用户看,所以我们用一种缓存系统来保存上次请求的数据,这次进入的时候先把缓存数据绘制到UI上,让用户先看到整个页面布局和可能过时的数据,等网络数据返回后再刷新一遍页面,以此来提高用户体验。那么就带来两个问题: 1, 什么样的数据应该缓存起来? 2, 什
阅读全文
摘要:客户端的加载流程和样式应该收敛内置到底层框架中的,对常规页面来说,这些流程和规范是无须上层业务关心的。 好处: 1, 统一的UI UE体验; 2, 把业务开发人员从加载样式中解放出来,不必在业务逻辑代码中插入各种弹出、关闭加载样式的代码,业务自己做的话很容易漏掉,导致加载状态异常; 3,方便后续修改
阅读全文
摘要:路由模块: 解耦各个业务,统一收敛页面跳转,动态决策跳转实现; 鉴权模块:收敛鉴权项目(比如登录、输入密码、短信验证、扫脸),后台动态控制鉴权项目; 收银台:收敛支付,统一到收银台; 开关: 动态控制,防止大规模灾难; 白名单: 内测; 模块化: 分组 + 解耦; 插件化: 模块化是插件化的前提,插
阅读全文
摘要:设计MVP之前,先要确定好以下模块之间是一对多还是一对一的关系: View > Presenter --> Model --> Interface(URL) 就是一个View只会有一个Presenter还是可以有多个? 一个Presenter只会有一个Model还是可以有多个? 一个Model对应一
阅读全文
摘要:这张图是互联网产品研发的一种最佳实践,这张图中没有包含异常流的处理。通常异常出现在进入开发甚至测试阶段了还在变更需求,进入封版发版阶段了还在修改代码,所以在这两个时间点都有需求冻结和代码冻结。
阅读全文
摘要:架构是系统层面的,可以是多层架构,也可以是事件驱动架构,也可以是微服务架构。 模式是GUI应用的一种职责分离设计。 三层架构(包含多层架构)和 MVC模式(包含MVP, MVVM) 没什么关系,它们不在同一个维度上。 三层架构是从整个应用程序架构的角度来分为DAL(数据访问层)、BLL(业务逻辑层)
阅读全文
摘要:直接贴上我做的ppt.
阅读全文
摘要:单一职责: 一个类中的属性和方法要有很高的相关性,不然就拆开;如果一个类很庞大,则需要进一步细分职能,把相关性更高的归到一块。 开闭原则: 对扩展开放,对修改关闭。 极端要求就是:程序完成后,除非是修改错误,不然不能修改代码,只能扩展代码。 比如一个功能,有多种实现方法,即有多个类型,不要用if-e
阅读全文
摘要:对一个规模较大的App开发团队来说,保持统一的代码规范是个好的事情,同时,保持统一的用户体验规范也是个好的事情。 当用户进入一个页面时,一般会有以下交互场景:场景1, 初始化loading,页面从server拉取配置信息;场景2, 初始化成功,页面展现业务UI布局,比如输入框,按钮等;场景3, 初始
阅读全文
摘要:在一个Activity页面,如果发起了AsyncTask任务,然后页面离开/销毁了,此时如果doInBackground没执行完,会有两个问题: 1, AsyncTask白白消耗资源,结果已经用不上了,因为UI也不在; 2, AsyncTask如果声明为Activity的内部类,会持有Activit
阅读全文
摘要:最近要全新架构另一个App,总结之前的经验,体会到了一个道理:特殊问题特殊处理。 在之前的App架构中,我总是趋于实现一个普遍的通用的框架,想把所有的业务、功能都纳入到这种框架的规则之下,这导致我的框架越来越庞大、臃肿,基本的普通的业务和功能模块倒是没什么问题,而那些特殊的业务和功能模块,也要硬生生
阅读全文
摘要:存储一些简单数据的时候,最快的实现是用SharePreferences,但SharePreferences的可靠性不高,在某些非官方ROM上,总是存取失败。后来想到用数据库来存取。产品中,存取的数据项目虽然很多,但每一个数据项目都只有1-3个字段而已,所以为每一个数据项目定义表结构来存取,实在是浪费
阅读全文
摘要:自从在Android中用上了消息框架,屡试不爽。不管是主线程发任务到后台线程,还是后台线程返回结果到主线程,甚至是完全在主线程中的调用,都用发消息-监听消息-收消息这种方式处理,真是解耦利器。 之前写过的两篇文章:用消息机制获取网络数据 和 用消息机制解耦Activity跳转。 之前在工程中都用的是
阅读全文
摘要:用PagerAdapter的时候会反复调用instantiateItem和destroyItem来创建和销毁View,没有复用性。这里封装了一个可复用View的PagerAdapter,给实现类留下的抽象方法是:
阅读全文
摘要:我见过的Activity方式有三种: 1, 默认的,在一个Activity里创建一个Intent,然后startActivity/startActivityForResult; 2, 给被跳转到的Activity编写静态方法,发起跳转的代码调用这个静态方法,直接传参数,不用构造Intent。数据压入
阅读全文
摘要:网络请求,不管是什么协议,是长连接还是短连接,总是一个异步的请求,过程包括:加请求参数->发起请求->接收响应->解析数据->获得业务数据。 最挫的做法是,业务代码包揽所有这些工作。 次挫的做法是,封装一个网络Utils类,业务代码传一个回调对象给这个类来获取网络请求数据。这个是普遍做法,缺点是一层
阅读全文
摘要:历时两个多月,自己架构的一个App快要完成了,有很多可以总结的地方: 1, 各个模块尽可能独立,不要直接调用,用消息机制解耦。包括页面跳转不要直接startActivity,而是用消息跳转;业务模块请求网络、数据库、异步任务等都不要直接调用,而是用发消息请求,收消息获取响应。 2, 设计好消息框架,
阅读全文
摘要:一个Android应用要被破解,要经历:反编译->分析代码->重新编译打包的过程,反破解的思路也是从在这三个步骤上做文章: 1, 寻找反编译工具的缺陷,通过阅读其源码或者对其进行压力测试找到其不支持或者运行会出错的Dalvik指令,然后在自己的代码中加入会执行这个指令的代码,让反编译工具运行的时候奔
阅读全文

浙公网安备 33010602011771号