移动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:通过 ...
随机推荐
- STM8S103内存详析
STM8S103的RAM有1k,0x00-0x3FF(RAM和ROM统一编址),其中0x200-0x3ff共512个字节默认为堆栈,剩余的低端512个字节又分为了Zero Page和剩余的RAM(简称 ...
- 2017年6月28日 python爬虫学习
1.写入csv文件2.lxml的用法3.自定义字典类的方法4.bytes解码得到str,str编码得到bytes5.json 1 import csv import lxml.html class S ...
- 现代C++ 基于范围的for和for_each语句
现代C++中强调,使用基于范围的 for 循环(Visual studio 2012之后的),相比于旧版的 for 循环更整洁和易于使用,并且不容易发生意外错误.让我们一睹为快. 当然,使用前需要包含 ...
- Regular Expressions Syntax
https://support.syslogwatcher.com/support/solutions/articles/8000033627-regular-expressions-syntax
- 3D拾取技术
在unity3d中用户通过触摸屏选中虚拟3D世界中的物体进行操控,就须要掌握3d 拾取技术. 3d拾取技术很的简单:由摄像机与屏幕上的触控点之间确定一条射线.由此射线射向3d世界, 最先和此射线相交的 ...
- 使用java源代码生成Kettle 4.4
kettle作为ETL工具.其功能日趋完好,已得到广大数据挖掘爱好者的青睐.又由于他是java开源项目.为适应项目需求.有必要研究其源代码,最好可以集成到Java项目中.作为项目执行流程的一个重要环节 ...
- hdoj--2036--改革春风吹满地(数学几何)
改革春风吹满地 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- Windows下VS2013+Caffe无GPU配置
Windows版本的caffe工具包下载地址: 点击打开链接 1. 将下载的caffe-master.zip解压到 D:\Software\Caffe 文件夹下,把 D:\Software\Caffe ...
- 5.IntellijIDEA常用快捷键总结
转自:https://blog.csdn.net/qq_17586821/article/details/52554731下面的这些常用快捷键需要在实际操作中不断地体会才能真正感受到它们的方便之处. ...
- Spring 4 CustomEditorConfigurer Example--转
原文地址:http://howtodoinjava.com/spring/spring-core/registering-built-in-property-editors-in-spring-4-c ...