目录
- 一、概述
- 1.2 通用分层
- 1.2 分层架构注意点
- 二、表现层(展示层)
- 2.1 表现层设计模式(MVC、MVP、MVVM)
- 2.2 使用XML设计表现层
- 2.3 UIP
- 2.4 表现层动态生成设计思想
- 三、中间层(业务层、业务逻辑层)
- 3.1 组件设计
- 3.2 工作流设计
- 3.3 实体设计
- 3.4 业务逻辑层框架(MSC)
- 四、数据访问层(持久层)
- 4.1 5种数据访问模式
- 4.2 其他(工厂模式、XML Schema、事务、连接对象管理)
- 五、数据架构规划与设计
- 六、物联网层次架构设计
- 七、案例分析
- 电子商务网站(网上商店PetShop)
- 基于物联网架构的电子小票服务系统
一、概述
软件层次式体系结构 是最通用的架构(可作为初始架构),也被叫作N 层架构模式 (n-tier architecture pattern)。
层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。
在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。
连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。
由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
1.2 通用分层
分层架构本身没有规定要分成多少层,大部分的应用会分成:
- 表现层(或称为展示层)
- 中间层(或称为业务层)
- 数据访问层(或称为持久层)
- 数据层
1.2 分层架构注意点
层次式体系结构是一个可靠的通用的架构,对很多应用来说,如果不确定哪种架构适合,可以用它作为一个初始架构。但是,设计时要注意以下两点:
(1)污水池反模式
所谓污水池反模式 (architecture sinkhole anti-pattern), 就是请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务逻辑。比如一些 Java EE例子,业务逻辑层只是简单的调用了持久层的接口,本身没有什么业务逻辑。每一层或多或少都有可能遇到这样的场景,关键是分析这样的请求的百分比是多少。二八原则可以帮助你决定是否正在遇到污水池反模式。如果请求超过20%,则应该考虑让一些层变成开放的。
(2)需要考虑的是分层架构可能会让你的应用变得庞大。
即使你的表现层和中间层可以独立发布,但它的确会带来一些潜在的问题,比如:分布模式复杂、健壮性下降、可靠性和性能的不足,以及代码规模的膨胀等。
二、表现层(展示层)
2.1 表现层设计模式(MVC、MVP、MVVM)
MVC模式(Spring MVC)
MVP模式(Android)
MVC模式中元素之间“混乱”的交互主要体现在允许View和 Model 直接进行“交流 ” , 这在MVP模式中是不允许的。
在MVP中View并不直接使用 Model, 它们之间的通信是通过 Presenter(MVC 中的 Controller) 来进行的,所有的交互都发生在 Presenter 内部,而在MVC中View会直接从Model中读取数据而不是通过Controller。
MVVM模式(VUE)
在MVVM模式下View和Model不能直接通信,两者的通信只能通过ViewModel来实现。
ViewModel通常要实现一个观察者,
当数据发生变化,ViewModel能够监听到数据的变化,然后通知对应的视图做自动更新;
而当用户操作视图,ViewModel也能监听到视图的变化,再通知数据做改动,
从而形成数据的双向绑定。
这使得MVVM更适用于数据驱动的场景,尤其是数据操作特别频繁的场景。
2.2 使用XML设计表现层
统一使用XML形式将GUI按照数据描述的形式保存下来,代替原先特有的表现形式所需要的GUI描述载体。
然后,对于特定的表现技术,实现不同的解析器解析XML配置文件。
根据XML中的标签,按照特有的表现技术实例化的GUI控件实例对象。
例如,解析器遇到button,JFC解析器会给予JLabel对象,
XSLT解析器会给予<button id=…>
这样一个HTML字符串,
再调用特定表现技术的API将实例化出来的组件对象添加到GUI上显示。
2.3 UIP
UIP(User Interface Process Application Block) 是微软社区开发的众多Application Block中的其中之一,它是开源的。
UIP提供了一个扩展的框架,用于简化用户界面与商业逻辑代码的分离的方法,
可以用它来写复杂的用户界面导航和工作流处理,并且它能够复用在不同的场景、并可以随着应用的增加而进行扩展。
使用UIP框架的应用程序把表现层分为了以下几层。
- User Interface Components: 这个组件就是原来的表现层,用户看到的和进行交互都是这个组件,它负责获取用户的数据并且返回结果。
- User Interface Process Components: 这个组件用于协调用户界面的各部分,使其配合后台的活动,例如导航和工作流控制,以及状态和视图的管理。用户看不到这一组件,但是这些组件为User Interface Components提供了重要的支持功能。
2.4 表现层动态生成设计思想
基于XML界面管理技术,包括 界面配置、界面动态生成 和界面定制 三部分:
界面配置: 读取XML静态定义生成界面
界面动态生成: 读取XML静态定义、数据库中的数据层信息,运行时动态生成界面
界面定制: 对界面的动态(运行时)修改过程
三、中间层(业务层、业务逻辑层)
3.1 组件设计
业务逻辑组件分为接口
和实现
类两个部分。
参考服务接口的设计、API设计、微服务拆分等
接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。
通常按模块
来设计业务逻辑组件
,每个模块设计一个业务逻辑组件,
并且每个业务逻辑组件以多个 DAO(Data Access Object) 组件作为基础,从而实现对外提供系统的业务逻辑服务。
增加业务逻辑组件的接口,是为了提供更好的解耦,控制器无须与具体的业务逻辑组件耦合,而是面向接口编程
。
3.2 工作流设计
工作流管理联盟(Workflow Management Coalition, WFMC)
将工作流定义为:
业务流程的全部或部分自动化,
在此过程中,文档、信息或任务 按照一定的过程规则流转,
实现组织成员间的协调工作以达到业务的整体目标。
工作流是一种反映业务流程的计算机化的模型,
是为了在先进计算机环境支持下实现经营过程集成 与 经营过程自动化而建立的可由工作流管理系统执行的业务模型。
它解决的主要问题是:
使在多个参与者 之间按照某种预定义的规则传递文档、信息或任务 的过程自动进行,
从而实现某个预期的业务目标,或者是促使此目标的实现。
(1) interface 1: 过程定义导入/导出接口。
(2) interface 2: 客户端应用程序接口。
(3) interface 3: 应用程序调用接口。
(4) interface 4: 工作流机协作接口。
(5) interface 5: 管理和监视接口。
用工作流的思想组织业务逻辑,优点是:
- 将应用逻辑 与 过程逻辑 分离,
- 在不修改具体功能的情况下,通过修改过程模型改变系统功能,完成对生产经营 部分过程 或全过程 的 集成管理,
- 可有效地把 人、信息 和 应用工具 合理地组织 在一起,发挥系统的最大效能。
3.3 实体设计
业务逻辑层实体提供对业务数据
及相关功能(在某些设计中)
的状态编程访问。
参考面向对象中的对象设计、DDD中的实体设计,即是领域模型,又是数据实体
业务逻辑层实体可以使用具有复杂架构的数据来构建,这种数据通常来自数据库中的多个相关表。
业务逻辑层实体数据可以作为业务过程的部分 I/O 参数传递。
业务逻辑层实体可以是可序列化的,以保持它们的当前状态。
在应用程序中表示业务逻辑层实体的方法有很多(从以数据为中心的模型到更加面向对象的表示法),
如XML、 通用 DataSet、 有类型的 DataSet 等。
3.4 业务逻辑层框架(MSC)
吸收了SOA思想之后的一个三层体系结构,如下图:
业务层采用业务容器(Business Container),
参考清晰架构中的按特性分包
业务容器中,业务逻辑按照Domain Model - Service - Control(MSC)
思想来实现的。
参考Spring MVC排除View后(前后端分离),具体业务处理的MC引入Service层后变为MSC分层
(1) Domain Model 是领域层业务对象,它仅仅包含业务相关的属性。
(2) Service 是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之
间定义良好的接口和契约联系起来。
(3) Control 服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。
四、数据访问层(持久层)
4.1 5种数据访问模式
(1)在线访问
占用数据库连接直接在线访问(shell、DB管理工具等)
(2)DataAccess Object
DAO模式是标准 J2EE 设计模式之一,
开发人员常常用这种模式将底层数据访问操作
与高层业务逻辑
分离开。
一个典型的DAO实现通常有以下组件。
(1)一个DAO工厂类。
(2)一个DAO接口。
(3)一个实现了DAO接口的具体类。
(4)数据传输对象。
这当中具体的DAO类包含访问特定数据源的数据的逻辑。
(3)Data Transfer Object
Data Transfer Object是经典EJB设计模式之一。
DTO本身是这样一组对象或是数据的容器,它需要跨不同的进程或是网络的边界来传输数据。
这类对象本身应该不包含具体的业务逻辑,并且通常这些对象内部只能进行一些诸如内部一致性检查和基本验证之类的方法,而且这些方法最好不要再调用其他的对象行为。
在具体设计这类对象(DTO)时,通常可以有如下两种选择。
(1) 使用编程语言内置的集合对象(列表、Map,弱类型校验)
(2) 通过创建自定义类来实现DTO对象
,通过定义显示的get或是set方法来访问数据。
具体实现中有许多方法试图将上述这两种方法的优点结合在一起。
第一种方法是代码生成技术
,该技术可以生成脱离现有元数据(如可扩展标记语言XML架构)的自定义DTO类的源代码;
第二种方法是提供更强大的集合
,尽管它也是平台内置的一般的集合,但它将关系
和数据类型信息
与原始数据
存储在一起,例如IBM提出的SDO技术或是微软ADO.NET中的DataSet
就支持这类方法。
(4)离线数据模式
离线数据(预定义格式:XML、文件等)内置于应用中,由应用直接进行访问
(5)ORM(Object/Relation Mapping)
大多数应用中的数据都是依据关系模型
存储在关系型数据库中;
而很多应用程序中的数据在开发或是运行时则是以对象
的形式组织起来的。
那么,对象/关系映射就提供了这样一种工具或是平台,
能够帮助将应用程序中的数据转换成关系型数据库中的记录;
或是将关系数据库中的记录转换成应用程序中代码便于操作的对象。
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC 进行了轻量级的对象封装,
使Java 程序员可以随心所欲地使用对象编程思维来操纵数据库。
4.2 其他(工厂模式、XML Schema、事务、连接对象管理)
工厂模式
参考JDBC和具体驱动(mysql、oracle、h2、postgresql)
事务处理(ACID)
参考jdbc事务处理(begin / comit / rollback)
原子性
表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
一致性
表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
隔离性
表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
持久性
表示已提交的数据在事务执行失败时,数据的状态都应该正确。
连接对象管理
参考数据库连接池设计思想
五、数据架构规划与设计
数据库设计与类的设计融合
对类和类之间关系的正确识别是数据模型的关键所在。
数据库设计与XML设计融合
目前,XML正在成为Internet上数据描述和交换的标准,并且将来会代替HTML而成为Web上保存数据的主要格式。
XML文档分为两类
:
一类是以数据为中心
的文档,这种文档在结构上是规则的,在内容上是同构的,具有较少的混合内容和嵌套层次,人们只关心文档中的数据而并不关心数据元素的存放顺序,这种文档简称为数据文档,它常用来存储和传输Web数据。
另一类是以文档为中心
的文档,这种文档的结构不规则,内容比较零散,具有较多的混合内容,并且元素之间的顺序是有关的,这种文档常用来在网页上发布描述性信息、产品性能介绍和E-mail信息等。
XML文档的存储方式有两种
:
(1) 基于文件的存储方式。
基于文件的存储方式是指将XML文档按其原始文本形式存储,主要存储技术包括操作系统文件库
、通用文档管理系统
和传统数据库的列(作为二进制大对象BLOB或字符大对象CLOB)
。这种存储方式需维护某种类型的附加索引,以建立文件之间的层次结构。
基于文件的存储方式的特点:
无法获取XML文档中的结构化数据;
通过附加索引可以定位具有某些关键字的XML文档,一旦关键字不确定,将很难定位;
查询时,只能以原始文档的形式返回,即不能获取文档内部信息;
文件管理存在容量大、管理难的缺点。
(2) 数据库存储方式。
数据库在数据管理方面具有管理方便、存储占用空间小、检索速度快、修改效率高和安全性好等优点。一种比较自然的想法是采用数据库
对XML文档进行存取和操作,这样可以利用相对成熟的数据库技术处理XML文档内部的数据。
数据库存储方式的特点:
能够管理结构化和半结构化数据;
具有管理和控制整个文档集合本身的能力;
可以对文档内部的数据进行操作;
具有数据库技术的特性,如多用户、并发控制和一致性约束等;
管理方便,易于操作。
六、物联网层次架构设计
物联网可以分为三个层次,
底层是用来感知数据的感知层,即利用传感器、二维码、RFID等设备随时随地获取物体的信息。
第二层是数据传输处理的网络层,即通过各种传感网络与互联网的融合,将对象当前的信息实时准确地传递出去。
第三层则是与行业需求结合的应用层,即通过智能计算、云计算等将对象进行智能化控制。
1.感知层
感知层用于识别物体、采集信息。
感知层包括二维码标签和识读器、RFID标签和读写器、摄像头、GPS、传感器、M2M终端、传感器网关等,主要功能是识别对象、采集信息,与人体结构中皮肤和五官的作用类似。
感知层解决的是人类世界和物理世界的数据获取
问题。
2.网络层
网络层用于传递信息和处理信息。
网络层包括通信网与互联网的融合网络、网络管理中心、信息中心和智能处理中心等。
网络层将感知层获取的信息进行传递和处理,类似于人体结构中的神经中枢和大脑。
网络层解决的是传输
和预处理
感知层所获得数据的问题。
3.应用层
应用层实现广泛智能化。
应用层是物联网与行业专业技术的深度融合,结合行业需求实现行业智能化,这类似于人们的社会分工。
物联网应用层利用经过分析处理的感知数据,为用户提供丰富的特定服务。
物联网的应用可分为
- 监控型(物流监控、污染监控)
- 查询型(智能检索、远程抄表)
- 控制型(智能交通、智能家居、路灯控制)
- 扫描型(手机钱包、高速公路不停车收费ETC)等
应用层解决的是信息处理
和人机交互
的问题。
人机界面
已远远超出现实中人与计算机交互的概念,而是泛指与应用程序相连的各种设备
与人
的交互