移动App架构设计
移动App架构设计
本文主要总结了几种经常使用的架构模式, 基本是层层递进的转载请注名出处 http://blog.csdn.net/uxyheaven, 良好的排版在https://github.com/uxyheaven/阅读
假设认为本文不错, 请在csdn给个顶, github给个star.
Native app的开发相比传统的项目迭代周期要短非常多, 需求的变化也频繁一些, 在开发的不同生命周期里採用不同的架构模式能够有效的节约开发时间, 提高开发效率, 这篇文章介绍几种经常使用的架构模式:
表现层
主要的MVC
移动app一般都是採用经典的mvc框架
| 层次 | 作用 | 设计原则 |
|---|---|---|
| 模型层(model) | 封装了应用的一系列数据, 并定义了操作, 处理这些数据的逻辑和计算规则。 | 通过Notification,KVO对控制器进行反馈 |
| 视图层(view) | 视图对象是一个应用中, 用户可以看到的对象. 视图对象知道怎样绘制自己, 也可以响应用户的操作. 视图对象的主要目的之中的一个是将应用模型对象中的数据显示出来, 并同意用户编辑该数据 | 视图通过不能直接操作模型层, 通过target-action, delegate, dataSource和控制器进行反馈 |
| 控制器层(controller) | 控制器层是在视图层和若干个模型层的中间人 | c能够直接操作模型层和视图层 |
总结:C对M:APIC对V:OutletV对C:Target-action, Delegate,DatasourceM对C:Notification。KVO
MVC的改进版 MVVM
MVVM是在MVC的基础上多了一个View Model: 表示逻辑, 将 model 的数据转换为 view 能够呈现的东西. 适合大量展示类的App
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdXh5aGVhdmVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
HMVC
Hierarchical MVC, 把client应用程序分解为有层次的父子关系的MVC, 重复应用这个模式, 形成结构化的client架构. 适合重型B/S架构的WebApp.
一个MVC模块由应用程序的一个模块抽象而成. 当中非常重要的一个概念就是 Parent MVC , 它能够相应界面上的实体, 也能够是一个抽象的对象. 设想一个app 有标签栏, 工具栏, 导航栏, 主工作区, 相应到HMVC上就是这个app最底部的标签栏 是 Layer1, Layer2 导航栏,主要工作区, 工具栏. 假设认为 Layer2 太复杂能够吧主要工作区放到 Layer3, 依次类推.
Controller 是功能模块的总控室, 它负责和子Controller或父Controller通信,并通知它的 View 处理改变界面显示, Model 处理一些业务逻辑或数据库訪问操作. 如才的样例里, 点击了工具栏里的一个button, 工具栏的Controller 响应这个event, 发现是要切换主工作区, 工具栏做不了,就传递他的父Controller处理(假设父Controller也处理不了, 就继续往上传递)然后标签栏的Controller处理切换主工作区.
长处:
- 把程序分成了几个部分, 减少了依赖性
- 支持鼓舞重用代码, 组件或者模块。
- 在今后的维护中, 提高了可扩展性。
分层设计
三层架构
我们在来看一下经典的三层架构
从上至下为
- 表示层(UI)
- 业务逻辑层或称为领域层(BLL)
- 数据訪问层(DAL)
| 层次 | 作用 | 设计原则 |
|---|---|---|
| 表示层(UI) | 向用户展现特定业务数据。採集用户的输入信息和操作 | 用户至上。兼顾简洁;不包括不论什么业务相关的逻辑处理 |
| 业务逻辑层(BLL) | 从DAL中获取数据, 在UI显示; 从UI中获取用户指令和数据, 运行业务逻辑或通过DAL写入数据源 | 作为U层与D层的桥梁,目的在于展现清晰的函数结构, 仅仅负责数据处理传递, 不涉及SQL语句和ADO.NET |
| 数据訪问层(DAL) | 直接操作数据库,针对数据的增添 删除 改动 查找; 详细为业务逻辑层或表示层提供数据服务。 | 专门操作数据库, 不考虑数据合法性. 数据库错误返回-1, 逻辑错误返回0, 并告知错误原因, 成功返回1 |
然后呢,我们如今的架构则是
四层架构
在三层架构的基础上多了业务规则层, 通常的三层是把业务逻辑和业务规则合并为一个层。统称为业务层.业务规则层的提出,既能够及时处理用户输入的不合法信息, 又能够及时处理数据库错误, 增大了业务逻辑层的结构清晰度, 让业务逻辑人员专心致志做逻辑
从上至下为
- 表示层
- 业务规则层
- 业务逻辑层或称为领域层
- 数据訪问层
| 层次 | 作用 | 设计原则 |
|---|---|---|
| 业务规则层(ECL) | 对于UI层传下来的參数来说,检查合法性。 | 用户至上,兼顾简洁。不包括不论什么业务相关的逻辑处理 |
引入service层
引入service层的架构和普通的分层架构的不同是: service层内部有数据, 能够单独执行.
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdXh5aGVhdmVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
从上至下为
- 表现层
- 服务层(service)
- 数据訪问层
- 业务逻辑层
| 层次 | 作用 | 设计原则 |
|---|---|---|
| 表现层 | 显示与用户的互交 | |
| 服务层 | service层提供表现层的业务逻辑入口,通过定义接口服务的形式,通过接口调用来完毕. | |
| 业务逻辑层 | 1接收服务层传来的DTO, 然后依据业务规则, 对传入的DTO进行加工, 返回加工后的信息 2 须要为每一个对象提供业务行为, 而且这些对象之间是独立的 3 业务对象之间的交互流程通过服务层来组织 | |
| 数据訪问层 | 本地数据远程数据的訪问接口 |
新秀VIPER
viper这里不多说了,请想了解的自行搜索
移动App架构设计的更多相关文章
- 【转】App架构设计经验谈:接口的设计
App架构设计经验谈:接口的设计 App与服务器的通信接口如何设计得好,需要考虑的地方挺多的,在此根据我的一些经验做一些总结分享,旨在抛砖引玉. 安全机制的设计 现在,大部分App的接口都采用REST ...
- App架构设计学习(一)---- 接口的设计
一.哎,最近换了家工作,结果工作很出的我意外,没有干熟悉的根据需求写代码,反而让我一个小菜鸟去重构一下App的架构(他们公司的app,已经上线了1.0版本了),没办法,只有硬着头皮去先学习学习,再总结 ...
- 转: ios app架构设计
http://keeganlee.me/post/architecture/20160107 看完这一系列文章后就知道怎么回答这类问题了: App架构设计经验谈:接口的设计 App架构设计经验谈:技术 ...
- Hybrid APP 架构设计思路
关于Hybrid模式开发app的好处,网络上已有很多文章阐述了,这里不展开. 本文将从以下几个方面阐述Hybrid app架构设计的一些经验和思考. 原文及讨论请到 github issue 通讯 作 ...
- Android APP架构设计——MVP的使用示例
0. 前言 为了更好地进行移动端架构设计,我们最常用的就是MVC.MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛.对于这三种架构设计以及优缺点已经在Android APP架构设计-- ...
- App架构设计经验谈:接口”安全机制”的设计
[原文地址 点击打开链接] 原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/architecture/20160107 微信订阅号:ke ...
- Hybrid APP架构设计思路
通讯 作为一种跨语言开发模式,通讯层是Hybrid架构首先应该考虑和设计的,往后所有的逻辑都是基于通讯层展开. Native(以Android为例)和H5通讯,基本原理: Android调用H5:通过 ...
- Android APP架构设计——MVC、MVP和MVVM介绍
)对于过大的项目,数据绑定需要花费更多的内存. 关于APP的架构设计就介绍到这吧,转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/529 ...
- Hybrid APP架构设计
通讯 作为一种跨语言开发模式,通讯层是Hybrid架构首先应该考虑和设计的,往后所有的逻辑都是基于通讯层展开. Native(以Android为例)和H5通讯,基本原理: Android调用H5:通过 ...
随机推荐
- SpringCloud学习笔记(12)----Spring Cloud Netflix之Hystrix断路器的流程和原理
工作流程(参考:https://github.com/Netflix/Hystrix/wiki/How-it-Works) 1. 创建一个HystrixCommand或HystrixObservabl ...
- nginx禁止特定UA访问
一.UA是什么? User Agent 简称UA,就是用户代理.通常我们用浏览器访问网站,在网站的日志中,我们的浏览器就是一种UA. 二.禁止特定UA访问 最近有个网站(www.C.com)抄袭公司主 ...
- 用MyBatis进行数据库的增删改查
前提是MyBatis环境部署好了,参考地址: https://www.cnblogs.com/package-java/p/10316536.html 为了方便演示,我提前在数据库插入了数据方便查询 ...
- vue实现tab栏切换
html <ul class="tab"> <li v-for="(item,index) in tabs" @click="tab ...
- iOS开发——AFNetworking基于https的使用
应公司项目需求,之前的项目使用的http,新项目要求使用https,这篇博客是在AFNetworking框架基于http的基础上修改而来. 1.在开始前,先要把 .crt 文件转成 .cer 文件,然 ...
- BZOJ 2938 [POI2000]病毒 (剪枝/A*迭代搜索)
LOJ BZOJ 题目大意:给你一些模式串,问是否存在一个无限长的文本串,不包含任何一个给定的模式串 并没有想到去模拟合法的文本串在模式串的Trie图上匹配的过程..我好菜啊 如果一个字符串合法,那么 ...
- React 中组件间通信的几种方式
在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通 ...
- 【Educational Codeforces Round 41 (Rated for Div. 2) D】Pair Of Lines
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果点的个数<=3 那么直接输出有解. 否则. 假设1,2最后会在一条直线上,则把这条直线上的点都删掉. 看看剩余的点是否在同 ...
- UVA 11020 - Efficient Solutions(set)
UVA 11020 - Efficient Solutions 题目链接 题意:每个人有两个属性值(x, y).对于每个人(x,y)而言,当有还有一个人(x', y'),假设他们的属性值满足x' &l ...
- zookeeper的理解与概述
文章转自https://www.cnblogs.com/likehua/p/3999600.html 感谢博主 文章转自:http://www.aboutyun.com/thread-9266-1- ...