13. 层次式架构设计理论与实践

1 层次式体系结构概述

软件体系结构

  • 定义
    • 定义:为软件系统提供结构、行为和属性的高级抽象。
    • 元素相互作用:指导元素集成的模式以及这些模式的约束组成。
  • 重要性
    • 指导系统开发:软件体系结构是系统开发早期设计决策的体现。
    • 影响系统后续开发:部署和维护具有重要影响。
  • 特点
    • 系统级抽象:关于系统的造以及系统各个元素工作机制的相对较小、却又能够反映问题的模型。
    • 促进大规模软件系统复用。

层次式架构

  • 是软件体系结构设计中最为常用的一种架构形式,也被叫作 N 层架构模式 (n-tier architecture pattern)。
  • 层次式架构设计将系统组织成多层,每一层为上层服务,并作为下层客户。
  • 分层架构本身没有规定要分成多少层,大部分的应用会分成表现层(或称为展示层)、中间层(或称为业务层)、数据访问层(或称为持久层)和数据层。
  • 分层的一个特性就是关注分离(separation of concerns)。

层次式架构的优缺点

  • 优点
    • 简化设计:简化了系统的设计和实现。
    • 提高可维护性:便于修改和维护。
  • 缺点
    • 可能引起性能问题:分层架构可能会让应用变得庞大。
    • 增加复杂性:分层可能会带来一些潜在的问题。

结论

  • 层次式架构是一种常见的架构模式,适合传统的 IT 项目和组织结构。
  • 随着技术的发展,层次式架构也在不断地发展中。

2 表现层框架设计

2.1 表现层设计模式

2.1.1 MVC 模式

MVC 是一种流行的软件设计模式,近年来随着 Java EE 的成熟,MVC 成为了 Java EE 平台上推荐的一种设计模式。

MVC 强制性地把一个应用的输入、处理、输出流程按照视图、控制、模型的方式进行分离,形成了控制器、模型、视图三个核心模块。

  • 控制器(Controller):接收用户输入并调用模型和视图去完成用户的需求。
  • 模型(Model):应用程序的主体部分,表示业务数据和业务逻辑。
  • 视图(View):用户看到并与之交互的界面,显示相关的数据,并能接收用户输入的数据。

2.1.2 MVP 模式

MVP 模式是经典的模式,与 MVC 演变而来,基本思想有相通的地方。

  • Controller/Presenter 负责逻辑的处理,Model 提供数据,View 负责显示。
  • View 和 Controller 不能直接进行“交流”。所有的交互都发生在 Presenter 内部

2.1.3 MVVM 模式

MVVM 模式是为解决 MVP 中 UI 种类变多,接口也会不断增加的问题而提出的。

  • ViewModel:用于数据转换的控制器,将命令从视图携带到对象。
  • View 和 ViewModel 之间使用 DataBinding 技术事件进行通信。

结论

  • MVC、MVP 和 MVVM 模式都是表现层设计的有效模式。
  • 选择合适的模式可以提高应用的可扩展性、健壮性及灵活性。

2.2 使用 XML 设计表现层,统一 Web Forms 与 Windows Form 的外观

XML 与 HTML 类似

  • XML 被公认为是优秀的数据描述语言,并且成为了行业广泛采用的数据描述标准。
  • XML 描述数据并集中于数据的内容,HTML 类似,但 HTML 很少采用 XML 作为表现层技术。

XML 控件组成

  • XML 控件可以看成是一个数据对象,包含位置信息、类型和绑定的事件等。
  • XML 描述控件属性,如 type=“button”,type=“panel” 等。

2.3 表现层中 UIP 设计思想

UIP(UserInterface Process Application Block) 是微软社区开发的众多Application Block 中的其中之一,它是开源的。 UIP 提供了一个扩展的框架,用于简化用户界面与商业逻辑代码的分离的方法,可以用它来写复杂的用户界面导航和工作流处理,并且它能够复用在不同的场景、并可以随着应用的增加而进行扩展。

2.4 表现层动态生成设计思想

基于 XML 的界面管理技术

  • 用 XML 生成配置文件及界面所需的元数据,按不同需求生成界面元素及软件界面。
  • 包括界面配置、界面动态生成和界面定制三部分。

界面配置

  • 对用户界面的静态定义,通过读取配置文件的初始值对界面配置。
  • 系统读取 XML 配置文件的表示层信息,运行时动态生成界面。

3 中间层架构设计

3.1 业务逻辑层组件设计

业务逻辑组件分为接口和实现类两个部分。

3.1.1 业务逻辑组件的实现类

  • 业务逻辑组件以 DAO(Data Access Object) 组件为基础,必须接收 Spring 容器注入的 DAO 组件。
  • 业务逻辑组件的实现类将 DAO 组件接口实例作为属性(面向接口编程)。

3.1.2 业务逻辑组件的配置

  • 业务逻辑组件的 DAO 组件未被初始化,由 Spring 的反向控制(IoC)或依赖注入(DI)机制完成。
  • 需要在 applicationContext.xml 里面配置 FacedeManager 组件。

3.2 业务逻辑层工作流设计

工作流管理联盟(Workflow Management Coalition)定义工作流为:业务流程的全部或部分自动化。

3.3 业务逻辑层实体设计

XML表示业务逻辑层实体

  • XML 用于表示业务逻辑层实体,具有标准支持、灵活性和互操作性。

DataSet 表示业务逻辑层实体

  • 通用 DataSet:灵活、可序列化、支持数据绑定和过滤、易于与 XML 互换。
  • 有类型 DataSet:代码易读、类型安全、编译时检查。

优点总结

  • 灵活性:能表示复杂数据关系。
  • 互操作性:易于与外部系统交换数据。
  • 数据绑定:支持与用户界面控件绑定。
  • 排序与过滤:支持数据的排序和过滤。
  • 可扩展性:易于适应数据库结构变化。

3.4 业务逻辑层框架

3.4.1 业务逻辑层框架概述

业务框架位于系统架构的中间层,是实现系统功能的核心组件。采用容器的形式,便于系统功能的开发、代码重用和管理。

3.4.2 业务逻辑层框架实现

在业务逻辑中,业务逻辑是按照 Domain Model—Service—Control 思想实现的。

  • Domain Model:领域层业务对象,包含业务相关的属性。
  • Service:业务过程实现的组成部分,应用程序的不同功能单元。
  • Control:服务控制器,负责服务之间的切换,提高灵活性和重用性。

3.4.3 Domain Model—Service—Control 交互关系

以下是 Domain Model—Service—Control 三者的交互关系:

  1. Service 的运行会依赖于 Domain Model 的状态,反之,Service 也会根据业务规则改变 Domain Model 的状态。
  2. Control 作为服务控制器,根据 Domain Model 的状态和相关参数决定 Service 之间的执行顺序及相互关系。
  3. Domain Model—Service—Control 的互动关系,使程序具备高度的可重用性和灵活性。

4 数据访问层设计

4.1 5 种数据访问模式

4.1.1 在线访问

在线访问是最基本的数据访问模式,占用数据库连接,读取数据。

4.1.2 Data Access Object

  • DAO 模式是标准 J2EE 设计模式之一,用于将底层数据访问操作与高层业务逻辑分离。
    • DAO 接口:定义数据访问操作。
    • DAO 实现:具体实现数据访问逻辑。
    • 数据传输对象:用于传输数据。

4.1.3 Data Transfer Object

  • DTO 用于在进程或网络间传输数据,不包含业务逻辑。
    • DTO 模式:简化数据传输,提高性能。

4.1.4 离线数据模式

  • 离线数据模式以数据为中心,数据从数据库获取后,按照预定义的结构存储。
    • 数据库:ADO.NET 或其他数据库访问技术。

4.1.5 对象/关系映射 (Object/Relation Mapping, O/R Mapping)

O/R Mapping 提供工具或平台,将数据转换成对象或关系型数据库记录。

4.2 工厂模式在数据访问层应用

工厂模式概述

在应用程序设计中,数据库访问需要良好的封装性和可维护性。工厂模式用于创建对象的接口,子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

定义访问接口

定义一个访问接口 DataAccess,包含以下方法:

  • DatabaseType DataType{get;}
  • IDbConnection DbConnection{get;}
  • void Open();
  • void Close();
  • IDbTransaction BeginTransaction();
  • int ExecuteNonQuery(string commandText);
  • DataSet ExecuteDataSet(string commandText);

实现具体类

实现 AbstractDataAccess 类,包含公共方法:

  • public sealed class MSSqlDataAccess : AbstractDataAccess
  • public class oleDbDataAccess : AbstractDataAccess
  • public class oracleDataAccess : AbstractDataAccess

创建 Factory 类

创建 DataAccessFactory 类,实现自动数据库切换的管理:

  • 根据数据库类型返回适当的数据库操纵类。
  • 使用 PersistenceProperty 属性设置数据库连接字符串。

使用 Factory 类

客户端代码调用 DataAccessFactory.CreateDataAccess() 创建 DataAccess 实例,执行数据库操作。

4.3 ORM、Hibernate 与 CM 2.0 设计思想

ORM 映射

  • ORM (Object-Relation Mapping) 在关系型数据库和对象之间作一个映射。
  • ORM 框架把数据表转换成对象,简化数据库操作。

CMP2.0 设计思想

  • CMP 2.0 (Container Managed Persistence) 由 EJB 规范定义。
  • CMP 2.0 将数据持久化逻辑从业务逻辑中分离,减少编码。

4.4 灵活运用XML Schema

XML Schema 简介

  • XML Schema 描述 XML 文档合法结构、内容和限制。
  • XML Schema 定义 XML 文档的结构和数据类型。

XML Schema 组成

  • XML Schema 由三部分组成:XML Schema 命名空间、元素声明和属性声明。
  • 基本组件包括:简单类型定义、复杂类型定义、元素声明、属性声明、模型组和符号空间。

4.5 事务处理设计

4.5.1 JavaBean 中使用 JDBC 方式进行事务处理

  • 在 JDBC 中,可以通过手动管理事务,使用 setAutoCommit(false) 禁用自动提交,然后调用 commit() 提交事务。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public int delete(int sID) {
    DataBaseContext dbc = new DataBaseContext();
    Connection con = dbc.getConnection();
    try {
    dbc.executeUpdate("delete from bylaw where ID="+sID);
    dbc.executeUpdate("delete from bylaw_content where ID="+sID);
    dbc.executeUpdate("delete from bylaw_affix where bylawid="+sID);
    con.commit();
    con.setAutoCommit(true);
    dbc.close();
    return 1;
    } catch(Exception exc) {
    transaction.rollback();
    exc.printStackTrace();
    dbc.close();
    return -1;
    }
    }
  • 事务处理设计中,JDBC 事务的默认提交方式为自动提交,需手动关闭。

4.5.2 SessionBean 中的 JTA 事务

  • JTA 是事务服务的 J2EE 解决方案,通过 UserTransaction 接口管理事务。
  • 示例代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public int delete(int sID) {
    DataBaseContext dbc = null;
    dbc = new DataBaseContext();
    dbc.getConnection();
    UserTransaction transaction = sessionContext.getUserTransaction();
    transaction.begin();
    try {
    dbc.executeUpdate("delete from bylaw where ID="+sID);
    dbc.executeUpdate("delete from bylaw_content where ID="+sID);
    dbc.executeUpdate("delete from bylaw_affix where bylawid="+sID);
    transaction.commit();
    dbc.close();
    return 1;
    } catch(Exception exc) {
    try {
    transaction.rollback();
    }
    catch(Exception ex) {
    // JTA 事务回滚出错处理
    ex.printStackTrace();
    }
    exc.printStackTrace();
    dbc.close();
    return -1;
    }
    }
  • JTA 事务管理中,UserTransaction 接口用于控制事务的开始、提交和回滚。

4.6 连接对象管理设计

连接池概念

  • 连接池用于管理数据库连接,避免频繁创建和销毁连接,提高性能。
  • 静态池:预先创建连接并放入池中,动态池:根据需求创建连接。

连接池实现

  • Java 提供多种容器类实现连接池,如 Vector、Stack 等。
  • 连接池管理策略包括标记空闲连接、分配和释放连接。

5 数据架构规划与设计

5.1 数据库设计与类的设计融合

  • 数据库设计和类设计是数据模型的关键所在。
  • 数据模型的识别和描述是艺术,没有唯一解决方案。
  • 好模型的目标是将工程项目整个生存期内的花费减至最小,同时考虑系统迁移和变化。

13.5.2 数据库设计与XML设计融合

  • XML 是数据描述和交换的标准,用于替代 HTML 成为 Web 存储数据的主要格式。

  • XML 文档分为两类:文档中心的文档和数据为中心的文档。

  • XML 存储方式包括基于文件的存储和数据库存储。

  • 基于文件的存储方式:

    • 存储技术包括操作系统文件库、通用文件管理系统和面向对象的数据库。
    • 特点:获取 XML 文档结构简单,但查询困难。
  • 数据库存储方式:

    • 管理方便、存储空间小、检索速度快。
    • 能管理结构化和半结构化数据,具有索引和查询能力。

在某种程度上, XML 及其一系列相关技术就是一个数据库系统。它提供了传统数据库所具有的特点,如存储(以 XML 文档形式)、数据库的模式 ( DTD 或 XMLSchema)、 查询语言(XQuery、XPath、XQL 和 XML-QL 等)和编程接口(如 SAX 、 DOM ) 等。

6 物联网层次架构设计

  1. 感知层
  • 感知层用于识别物体、采集信息,包括二维码标签、RFID 标签和读写器、摄像头、GPS、传感器等。
  • 感知层解决的是物理世界的数据获取问题,通过传感器、数码相机等设备采集外部物理世界的数据。
  1. 网络层
  • 网络层用于传输信息和处理信息,包括通信网与互联网的融合网络、网络管理中心和智能处理中心等。
  • 网络层解决的是传输和处理感知层所获得数据的问题,通过移动通信网、互联网、企业内部网等进行传输。
  1. 应用层
  • 应用层实现产业智能化,结合行业需求实现行业智能化。
  • 物联网应用层利用经过分析处理的感知数据,为用户提供丰富的特定服务。
  • 应用层解决的是信息处理和人机交互的问题,涵盖国民经济和社会的各个领域。

总结

  • 物联网是泛指应用各种程序相连的设备和系统,为用户带来丰富多彩的物联网应用。
  • 物联网的发展将推动物联网产业的繁荣,给整个产业链带来丰厚的回报。

7 电子商务网站(网上商店PetShop)

7.1 电子商务网站PetShop

PetShop 是一个范例,展示 .Net 企业系统开发的能力。随着版本的更新,PetShop 架构与代码不断优化。

PetShop 基于 .Net 2.0,采用 B/S 系统架构。数据访问层(DAL)通过接口与业务逻辑层交互。

7.2 基于物联网架构的电子小票服务系统

电子小票物联网架构

采用感知层、网络层和应用层的三层物联网体系架构模型。

电子小票服务系统架构

系统由小票智能硬件、商家收银机、电子小票云平台、微信公众平台、消费者智能手机和商家 PC 终端构成。