定义:层次式体系结构将系统组成为一个层次结构,每一层为上层服务,并作为下层客户。除少数精心挑选的输出函数外,内部层接口只对相邻层可见。每一层最多只影响两层,只要给相邻层提供相同接口,每层就可以用不同方法实现——这为软件重用提供了强大支持。
大部分应用会分成四层,自上而下依次为:表现层 → 中间层(业务层)→ 访问层(持久层)→ 数据层。
最大特点:关注点分离(Separation of Concerns)——每层组件只负责本层逻辑,角色职责明确,容易开发、测试、管理与维护。
MVC(Model-View-Controller)把应用的输入、处理、输出流程分离为三个核心模块:
MVC 优点:允许多种界面扩展、易于维护、易于构建强大 UI、增加可拓展性/强壮性/灵活性。
MVP(Model-View-Presenter):Model 提供数据,View 负责显示,Presenter 负责逻辑处理。不仅避免 View 与 Model 耦合,还进一步降低 Presenter 对 View 的依赖。优点:① 模型与视图完全分离;② 交互集中在 Presenter 内,高效使用模型;③ 一个 Presenter 可用于多个视图;④ 逻辑可脱离 UI 做单元测试。MVP 有两个经典变体:Passive View(视图完全无逻辑,Presenter 直接命令视图刷新,可测试性最强)与 Supervising Controller(视图自己处理简单数据绑定,Presenter 只处理复杂逻辑)。
MVVM(Model-View-ViewModel):View 与 Model 不能直接通信,交互只能通过 ViewModel;其核心是 DataBinding 实现双向绑定,内容包括数据状态处理、数据绑定及数据转换。典型框架:Vue.js、Angular、WPF。
| 对比维度 | MVC | MVP | MVVM |
|---|---|---|---|
| View 与 Model 关系 | View 可直接引用 Model | 完全隔离,经 Presenter 中转 | 完全隔离,经 ViewModel + 数据绑定 |
| 中间人职责 | Controller 接收输入、调度 | Presenter 处理全部逻辑 | ViewModel 数据状态/绑定/转换 |
| 数据同步 | 手动 | 手动(Presenter 处理) | 自动(双向绑定) |
| 可测试性 | 一般 | 好 | 好 |
1. 业务逻辑层组件:分为接口 + 实现类两部分。接口定义业务逻辑组件必须实现的方法,是整个系统运行的核心。通常按模块设计业务逻辑组件,每个组件以多个 DAO(Data Access Object)组件为基础,对外提供业务逻辑服务。
2. 工作流设计:工作流管理联盟 WFMC 定义:工作流是业务流程的全部或部分自动化,在此过程中,文档、信息或任务按照一定的过程规则流转,实现组织成员间的协调工作以达到业务的整体目标。
| 接口 | 连接对象 | 作用 |
|---|---|---|
| 接口 1 | 过程定义工具 ↔ 工作流引擎 | 过程定义导入/导出(早期 WPDL,后发展为 XPDL) |
| 接口 2 | 客户端应用 ↔ 工作流引擎 | 处理需要人工干预的任务(工作项 workitem) |
| 接口 3 | 被调用应用 ↔ 工作流引擎 | 引擎直接激活外部应用工具执行活动 |
| 接口 4 | 工作流引擎 ↔ 其他工作流引擎 | 不同工作流执行服务之间的协作/互操作 |
| 接口 5 | 管理监视工具 ↔ 工作流引擎 | 过程实例状态监控与管理(用户/角色/审计/资源控制) |
3. 业务逻辑层实体:提供对业务数据及相关功能的状态编程访问;可由数据库多个相关表的数据构建;可作为业务过程的 I/O 参数传递;可序列化以保持当前状态。
4. 业务逻辑层框架:位于中间层,采用容器形式,按 Domain Model - Service - Control 思想实现:Domain Model 是仅含业务属性的领域层业务对象;Service 是业务过程组成的功能单元,通过定义良好的接口和契约联系;Control 是服务控制器,是服务之间切换的纽带。
数据访问模式共 5 种:
| 模式 | 要点 |
|---|---|
| ① 在线访问 | 最常用;占用一个数据库连接,每个操作都通过该连接不断与数据源交互 |
| ② DAO | 标准 J2EE 设计模式;将底层数据访问与高层业务逻辑分离;典型组成:DAO 工厂类 + DAO 接口 + 实现类 + 数据传输对象 |
| ③ DTO(Data Transfer Object) | EJB 设计模式之一;一组对象或容器,需要跨越进程或网络边界传输数据 |
| ④ 离线数据模式 | 以数据为中心,数据按预定义结构存于本应用中,操作独立于后台连接或事务 |
| ⑤ ORM 对象/关系映射 | 利用工具将应用数据与关系数据库记录互相转换,像操作对象一样操作数据库 |
工厂模式的应用:定义创建对象的接口,让子类决定实例化哪个类——先定义操纵数据库的接口,再根据数据库的不同由类工厂决定实例化哪个类,以支持多种数据库。
ORM 与 Hibernate:Hibernate 是功能强大的 O/R 映射方案,推动基于普通 Java 对象(POJO)模型的持久对象开发。
事务处理:必须服从 ISO/IEC 制定的 ACID 原则——原子性(任何失败都导致修改失效)、一致性(失败时受影响数据恢复到执行前状态)、隔离性(提交之前对其他事务不可见)、持久性(已提交数据在失败时状态仍正确)。
| 层次 | 功能 | 组成 | 人体类比 |
|---|---|---|---|
| 感知层 | 识别物体、采集信息 | 二维码标签和识读器、RFID 标签和读写器、摄像头、GPS、传感器、M2M 终端、传感器网关 | 皮肤和五官 |
| 网络层 | 传递信息和处理信息 | 通信网与互联网的融合网络、网络管理中心、信息中心、智能处理中心 | 神经中枢和大脑 |
| 应用层 | 实现广泛智能化 | 物联网与行业专业技术深度融合,结合行业需求实现行业智能化 | 社会分工 |