最近做一个项目,在项目搭建之前,花了些许时间去思考一下如何搭建一个合适的架构。一开始的构思是希望能合理的把应用的各部分进行分离,使其像金字塔一样从上往下,下层为上层提供功能。

在平常项目中,总是有很多应用级的变量,如果不合理存放,势必在项目变得越来越庞大的时候难以掌控。所以我基于这一关键点出发,定义出了第一层:配置层

基于配置层,我继承出总共5层,先把我的架构图贴上:

【系统配置层】

配置层负责存储应用内的通用变量,也就是可以在应用内多个界面或者模块中使用到的变量都会在这里预先配置,例如我会配置如下的变量:

(1)应用Application实例

(2)当前activity实例

(3)首页activity实例

(4)第三方SDK的Key

(5)当前登陆用户ID

所以在这一层我会定义出多个类进行分类存放,其中每个类都没有通信关系:

【数据存储层】

这一层通常定义一些应用内本地持久化存储的功能,因为一些小项目有时候不会要求做缓存功能,所以这一层可以为空,如果有通常我会定义一些功能如下:

(1)登陆账号存放功能,可以插入账号,然后把用过的账号列表拿出来

(2)某些功能模块的缓存,例如商品首页的数据缓存放在这里,可以无网的时候显示

(3)存放账号登陆后的一些个人信息,个人名称、手机号码等等

【系统API层】

这一层是比较重要的一层,包含了整个应用的业务逻辑功能,所以模块的功能都在这里体现,界面只是直接调用这一层的功能进行数据渲染,系统API层内部会定义很多基础功能,例如网络请求、JSON解析等待,然后封装这些功能,对外提供各种业务逻辑的实现。这一层可以根据自己的架构设计,在这一层内部进行细分,从而编写适合自己项目的内部架构。

(1)账号功能:登陆功能、忘记密码、注册帐号

(2)商品模块:获取商品列表、获取商品详情

上面的图中,ServerFace、ServerLogin就是对外提供的业务逻辑实现,封装得相当完善,下层只需要调用就可以获取想要得数据。毫不夸张的说,这一层相当于在控制台运行的APP,通过指令获取想要的数据,之后你的数据可以自由发挥渲染到界面上去。

【系统应用层】

这一层很好理解,就是应用的界面层,每一个界面都是独立,界面调用系统应用层的数据进行渲染。

这一层内,我根据自己实际需要,在BaseActivity定义了逻辑,例如Activity启动的时候,将当前实例赋值到配置层的当前启动Activity变量中。

【系统启动层】

这一层相当简单,其实就是Application实例入口,简单的项目Application内通常只有一些初始化的代码,例如将Application实例存放到配置层的变量中。

【架构设计】Android:配置式金字塔架构的更多相关文章

  1. Atitit.架构设计趋势 设计模式 ---微服务架构  soa

    Atitit.架构设计趋势 设计模式 ---微服务架构  soa 什么是微服务架构?1 .微服务与SOA的关系 :微服务架架构师面向服务架构(SOA)的一种特定实现1 微服务与康威定律2 微服务的一些 ...

  2. MySQL性能调优与架构设计——第2章 MySQL架构组成

    第2章 MySQL架构组成 前言   麻雀虽小,五脏俱全.MySQL 虽然以简单著称,但其内部结构并不简单.本章从MySQL物理组成.逻辑组成,以及相关工具几个角度来介绍 MySQL 的整体架构组成, ...

  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  4. App架构设计经验谈:接口”安全机制”的设计

    [原文地址 点击打开链接] 原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/architecture/20160107 微信订阅号:ke ...

  5. 基于laravel4.2的相关架构设计

    项目组不久前引进了laravel框架,本人参与了laravel的调研和项目架构设计.个人认为项目架构中基于laravel的有些设计还是比较实用和有借鉴性的,现将一些设计分享给大家,希望能和大家共同学习 ...

  6. 京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML

    软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达.图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡.C4模型通过不同的抽象层级来表达系统的静态结构 ...

  7. 大数据时代的IT架构设计

    大数据时代的IT架构设计(来自互联网.银行等领域的一线架构师先进经验分享) IT架构设计研究组 编著   ISBN 978-7-121-22605-2 2014年4月出版 定价:49.00元 208页 ...

  8. 转: ios app架构设计

    http://keeganlee.me/post/architecture/20160107 看完这一系列文章后就知道怎么回答这类问题了: App架构设计经验谈:接口的设计 App架构设计经验谈:技术 ...

  9. Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

    前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的 ...

随机推荐

  1. win 下 python ImportError: No module named requests

    第一次弄爬虫,报库找不到,网上找了半天,一般都让都让改成绝对路径...那不是饮鸩止渴嘛. 然后 在无意中发现,不需要控制台输入pip命令,因为不是在Linux下啊,,win下直接在pycharm里添加 ...

  2. ELK实时日志分析平台环境部署

    为什么要用到ELK一般我们需要进行日志分析场景是:直接在日志文件中 grep.awk 就可以获得自己想要的信息.但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档.文本搜索太慢怎么办 ...

  3. StrictRedis

    StrictRedis对象⽅法 通过init创建对象,指定参数host.port与指定的服务器和端⼝连接,host默认为localhost,port默认为6379,db默认为0 sr = Strict ...

  4. [Android] 对于com.google.gson.JsonElement的转义问题

    不多说了,com.google.gson.JsonElement使用的时候,toString()跟getAsString()这两个方法对于特殊字符的转义是不同的, 看这里的解释: https://st ...

  5. ECMAScript6 入门教程记录 变量的解构赋值

    (1)变量的解构赋值 基本用法:ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). let a = 1; let b = 2; let c = ...

  6. 打造RecyclerView的n级列表

    先上效果图: 1.该多级列表的优势: 支持无限级列表展开 基于一个recyclerView实现 可以自定义每一级item的样式,定制化更强 2.设计的思路 数据结构List,ItemBean类中有变量 ...

  7. win10配置环境变量

  8. JavaFX-Platform&Screen

    1Platform常用方法有exit().runlater().isSupported() exit(): Stage stage = new Stage(); Stage stage1 = new ...

  9. js 常用代码

    //获取url中的参数 function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "= ...

  10. c#基础之abstract和interface

    一.abstract abstract 的词义是“抽象”,它用来定义抽象类.抽象类不能被实例化只能被继承. 定义抽象类的格式如下:public abstract ClassName{……} 注意:只有 ...