层次架构
目录
1 层次式体系结构概述
层次/分层架构是最通用的架构,常作为初始架构。层次架构【关注分离】,即每层只负责本层的工作。
2 表现层框架设计 ⭐️
MVC/MVP/MVVM要实现完整流程还需ORM,故严格讲仅属于模式。
2.1 MVC
MVC(Model-View-Controller)架构风格/模式的组成:
- 【Model】(模型):应用程序的主体部分。模型表示业务数据和业务逻辑。一个模型通为多个视图提供数据。提高应用的可重用性。
- 在J2EE体系结构中为EJB(Entity Bean、Session Bean等)
- 【View】(视图):用户看到并与之交互的界面。接收用户输入数据,向用户展示数据。
- 在J2EE体系结构中为JSP
- 【Controller】(控制器):用户界面与Model的接口。接受用户的输入,并调用模型和视图去完成用户的需求。
- 在J2EE体系结构中为Servlet
优点:
- 允许多种用户界面的扩展
- 易于维护
- 易于构件功能强大的用户界面
- 增加应用的可拓展性、强壮性、灵活性
2.2 MVP
MVP(Model-View-Presenter)是MVC的变种,优点如下:
- 模型与视图完全分离,可以修改视图而不影响模型。(做了严格分层;MVC并非严格分层)
- 可以更高效地使用模型,因为所有交互都发生在【Presenter】内部
- 可以将一个Presenter用于多个视图,而不需要改变Presenter的逻辑
- 若把逻辑放在Presenter中,则可脱离用户接口来测试这些逻辑(单元测试)
2.3 MVVM
MVVM(Model-View-ViewModel)风格中,View和Model的交互通过ViewModel来实现,也就是View和Model不能直接通信,两者的通信只能通过ViewModel来实现。ViewModel是MVVM的核心,通过DataBinding实现View与Model之间的双向绑定,其内容包括数据状态处理、数据绑定及数据转换。
3 中间层框架设计
业务逻辑框架位于系统架构的中间层,是实现系统功能的核心组件。采用容器的形式,便于系统功能的开发、代码重用和管理。在业务容器中,业务逻辑常按照Domain Model-Service-Contro思想来实现,其中:
- Domain Model:仅包含业务相关的属性的领域层业务对象。
- Service是业务过程实现的组成部分,是应用程序的不同功能单元,通过在这些服务之间定义良好的接口和契约联系起来。
- Control服务控制器,是服务之间的纽带,不同服务之间的切换就是通过它来实现的。
3.1 组件设计
业务逻辑层组件分为接口和实现类两个部分。接口用于定义业务逻辑组件,定义业务逻辑组件必须实现的方法是整个系统运行的核心。通常按模块来设计业务逻辑组件,每个模块设计一个业务逻辑组件,并且每个业务逻辑组件以多个数据访问对象(Data Access Object,DAO)组件作为基线,从而实现对外提供系统的业务逻辑服务。
3.2 工作流设计
工作流管理联盟(Workflow Management Coalition,WFMC)将工作流定义为:业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协调工作已达到业务的整体目标。
如图,工作流参考模型:
3.3 实体设计
逻辑层实体提供对业务数据及相关功能(在某些设计中)的状态编程访问。可以使用具有复杂架构的数据构建,这种数据通常来自数据库中的多个相关表。业务逻辑层实体数据可以作为业务过程的部分I/O参数传递。业务逻辑层实体是可序列化的以保持他们的当前状态。
4 数据访问层框架设计
4.1 数据访问模式
- 在线访问
- Data Access Object
- Data Transfer Object
- 离线数据模式
- 对象/关系映射
4.2 工厂模式在数据访问层的应用
工厂设计模式是数据访问层中的主要使用方法。要实现工厂模式在数据数据访问层的应用,需要在实际开发过程中将这些数据库访问类再作一次封装。不仅可以达到上述目标,还可以减少操作数据库的步骤,减少代码编写量。
工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。可能会涉及对多种数据库的操作,因此需要先定义一个操纵数据库的接口,然后根据数据库的不同,由类工厂决定实例化哪个类。
4.3 ORM ⭐️
进行数据访问层设计时常用到ORM(Object Relational Mapping),建立对象与关系数据之间的映射,使得在具体操纵数据库时不再需要和复杂的SQL语句打交道,只需像平时操作对象一样操作即可。
映射关系表:
面向对象 | 关系数据库 |
---|---|
类(Class) | 数据库的表(Table) |
对象(Object) | 记录(Record,行数据) |
对象的属性(Attribute) | 字段(Field) |
实现技术对比表:
维度 | Hibernate | MyBatis(iBatis) |
---|---|---|
简单对比 | 强大,复杂,间接,SQL无关 | 小巧,简单,直接,SQL相关 |
可移植性 | 好(不关心具体数据库) | 差(根据数据库SQL编写) |
复杂多表关联 | 不支持 | 支持 |
4.4 XML Schema
XML Schema用来描述XML文档合法结构、内容和限制,由XML 1.0自描述,并且使用了命名空间,有丰富的内嵌数据类型及其强大的数据结构定义功能,充分地改造了并且极大地扩展了DTD(Document Type Definition,定义传统描述XML文档结构和内容限制)的能力,将逐步替代DTD成为XML体系中正式的类型语言,同XML规范、Namespace规范一起成为XML体系的坚实基础。
4.5 事务处理设计
事务(Transaction)是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或一步也不执行,则称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,则称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚(回到最初的系统状态)。事务必须服从ISO/IEC所制定的ACID原则。
4.6 连接对象管理设计
对于共享资源,为了解决资源频繁分配、释放所造成的问题,可以使用资源池设计模式。把该模式应用到数据库连接管理领域,即建立一个数据库连接池,提供一套高效的连接分配、使用策略。建立连接池的第一步为建立静态连接池,其中静态是指池中的连接在系统初始化时即已分配好,并且不能够随意关闭。该静态连接池提供了一套可自定义的分配、释放策略。当客户请求数据库连接时,首先看连接池中是否有未分配出去的连接,若存在空闲连接则把连接分配给客户,并作相应处理。
5 数据架构规划与设计
5.1 数据库与类的设计融合
对类和类之间关系的正确识别是数据模型的关键所在。
要想将建模过程缩减为一个简单的、逐步进行的过程是不太可能的。从本质上讲,建模是一项艺术。对一个给定的复杂情况而言,不存在唯一正确的数据模型,然而却存在好的数据模型。一个企业或机构的某个数据模型可能会优于另一个数据模型,如何为一个特定的系统建立数据模型没有唯一的解决方案。
好模型的目标是将工程项目整个生存期内的花费减至最小,同时也会考虑到随时间推移系统可能发生的变化,因而设计时也要考虑能适应这些变化。因此,将目光集中在最大限度地降低开发费用上是一个错误。
5.2 数据库设计与XML设计融合
XML文档分为两类:
-
以数据为中心的文档。这种文档结构规则,内容同构,具有较少的混合内容和嵌套层次,人们只关心文档中的数据而并不关心数据元素的存放顺序。这种文档简称数据文档,常用来存储和传输Web数据
-
以文档为中心的文档。这种文档结构不规则,内容比较零散,具有较多的混合内容,并且元素之间的顺序是有关的。这种文档常用来在网页上发布描述性信息、产品性能介绍和E-mail信息等。
XML文档的存储方式:基于文件的存储方式、数据库存储方式。
6 物联网层次架构设计
物联网(Internet of Things,IoT)通过信息传感设备,按约定的协议,将任何物体与网络相连接,物体通过信息传播媒介进行信息交换和通信,以实现智能化识别、定位、跟踪、监管等功能。其结构从上往下依次为:
- 应用层:解决信息处理和人机交互问题
- 例:应用服务、智能终端
- 有时在应用层之后增加平台层(如操作系统、软件开发、设备管理平台、连接管理平台)
- 网络层:传递信息和处理信息
- 例:网络通信标准/协议
- 感知层:解决数据获取问题
- 例:传感器、芯片、通信模组
示例: