原子标签索引:[概念×12 | 机制×4 | 流程×4 | 分类×8 | 判据×4 | 案例×2 | 数据×4] 上游:第7章(MVC 等设计模式基础) 下游:论文"论分层架构/物联网架构设计"核心题源;案例题常考物联网三层+PetShop 分层
标准表述
- 层次式体系结构:将系统组成一个层次结构,每一层为上层服务,并作为下层客户。
- 软件层次式体系结构是最通用的架构,也叫 N 层架构模式(n-tier architecture pattern),是 Java EE 应用经常采用的标准模式。
- 大部分应用分成四层:表现层(展示层)、中间层(业务层)、数据访问层(持久层)、数据层。
- 分层架构的核心特性是关注分离(separation of concerns):每层组件只负责本层逻辑。
- 污水池反模式:请求流简单穿过几层,每层几乎无业务逻辑;若此类请求超过 20%,应考虑把一些层变成开放的(二八原则)。
- MVC 强制将输入、处理、输出按视图、控制、模型方式分离,形成控制器、模型、视图三个核心模块。
- MVP 与 MVC 的根本区别:MVP 中 View 不直接使用 Model,所有交互都发生在 Presenter 内部。
- MVVM 的核心是 ViewModel,通过 DataBinding 实现 View 与 Model 之间的双向绑定。
- 工作流(WFMC 定义):业务流程的全部或部分自动化,文档、信息或任务按一定过程规则流转,实现组织成员间的协调。
- 事务必须服从 ACID 原则:原子性、一致性、隔离性、持久性。
- ORM:在关系型数据库和对象之间作映射,使开发者像操作对象一样操纵数据库,无需直接处理 SQL。
- 物联网分三个层次:感知层(识别物体、采集信息)、网络层(传递信息和处理信息)、应用层(实现广泛智能化)。
- 企业数据交换总线:不同企业应用之间进行信息交换的公共通道,实质是连接器(Connector)软件系统。
蒸馏笔记
概念
- 层次式体系结构:见标准表述;内部层接口只对相邻层可见,每层最多影响两层。
- 污水池反模式:见标准表述;危害是请求穿层无逻辑、代码膨胀。
- MVC:控制器(接受用户输入、调用模型和视图);模型(业务数据与业务逻辑,可被多个视图重用);视图(显示、接收输入,不处理业务,可查状态但不能改模型)。
- MVP:Model-View-Presenter;Presenter 依赖抽象化的 View 接口 IView,UI 逻辑易测试;多用于 Android 开发。
- MVVM:Model-View-ViewModel;为解决 MVP 中 UI 种类增多、接口不断增加的问题而提出;适用于数据操作频繁的数据驱动场景;建议用官方 ViewModel、LiveData 组件实现。
- UIP:微软开源的 User Interface Process Application Block;把表现层分为 User Interface Components(用户可见交互层)和 User Interface Process Components(协调导航、工作流、状态管理)。
- 工作流:见标准表述;1993 年成立工作流管理联盟 WFMC。
- IoC/DI:Spring 的反向控制/依赖注入机制,负责 DAO 组件的初始化注入。
- DAO:Data Access Object,标准 J2EE 设计模式,将底层访问与高层业务逻辑分离。
- DTO:Data Transfer Object,经典 EJB 设计模式,跨进程/网络边界传输数据的容器,本身不含业务逻辑。
- ORM:见标准表述;实质上 ORM 会生成 DAL。
- Hibernate:开源的对象关系映射框架,对 JDBC 轻量级封装,本质是提供数据库服务的中间件。
机制
- MVVM 双向绑定链:数据变化 → ViewModel 监听 → 通知视图自动更新;用户操作视图 → ViewModel 监听 → 通知数据改动。
- MVP 解耦机制:View 与 Model 不通信 → 交互全在 Presenter → Presenter 只依赖 IView 接口 → 逻辑可脱离 UI 单元测试。
- 分层复用机制:每层只影响相邻两层 + 提供相同接口 → 允许每层不同实现 → 强大的软件重用支持。
- ORM 性能机制:通过 Cache 实现 → 隔离实际数据存储与业务层 → 可对每层单独跟踪 → 性能优化的可能。
流程
MVC 协作流程:控制器接收用户请求 → 决定调用哪个模型处理 → 模型执行业务逻辑返回数据 → 控制器调用相应视图格式化数据 → 视图呈现给用户。
JDBC 事务(JavaBean 中):①获取 Connection(默认 auto-commit)→ ②setAutoCommit(false) 屏蔽自动提交 → ③执行多条 SQL → ④commit() 提交 → 异常时 rollBack() 回滚 → ⑤恢复 setAutoCommit(true)。
JTA 事务(SessionBean 中):①sessionContext.getUserTransaction() 获取事务 → ②begin() 开始 → ③执行 SQL → ④commit() 提交 → 异常时 rollback() 回滚。JTA 三个主要接口:UserTransaction(事务划分与基本操作)、TransactionManager(上下文管理)、Transaction。
数据库连接池策略:①系统初始化时按配置建立静态连接池(Vector/Stack 容器,连接不可随意关闭)→ ②客户请求连接:池中有空闲则分配并标记已分配;无空闲则在已分配连接中寻找合适者复用 → ③客户释放连接:无使用者则放回池中而非关闭。
分类体系
表现层设计模式(3 种对比) 1. MVC:View 可直接从 Model 读数据;Java EE 推荐模式;优点=多界面扩展、易维护、界面强大。 2. MVP:View 不直接用 Model;一个 Presenter 可用于多个视图;逻辑可单元测试。 3. MVVM:View 与 Model 通过 ViewModel+DataBinding 双向绑定;数据驱动场景;缺点=问题来源不好定位(数据问题或逻辑改视图均可引起)。
业务逻辑层实体表示方法(3 种):XML(W3C 标准、灵活、互操作);通用 DataSet(灵活、序列化、数据绑定、排序过滤 DataView、与 XML 互换、开放式并发、可扩展);有类型的 DataSet(代码易读、IntelliSense、编译时类型检查)。
5 种数据访问模式:①在线访问(最基本最常用,占用一个连接不断交互);②DataAccess Object(DAO,典型实现=DAO 工厂类+DAO 接口+实现类+数据传输对象);③Data Transfer Object(DTO,两种实现选择=内置集合对象或自定义类+get/set);④离线数据模式(以数据为中心,独立于连接/事务/数据源,可与 XML 互转);⑤对象/关系映射 O/R Mapping。
业务框架三层思想 Domain Model—Service—Control:Domain Model(领域层业务对象,仅含业务相关属性);Service(功能单元,中立接口定义→松耦合);Control(服务控制器,决定 Service 执行顺序,实现服务与服务控制隔离)。
XML 文档两类:以数据为中心的文档(数据文档:结构规则、内容同构、少混合内容和嵌套、顺序无关,用于存储传输 Web 数据);以文档为中心的文档(结构不规则、内容零散、混合内容多、顺序有关,用于网页发布描述性信息)。
XML 文档存储两种方式:基于文件的存储(原始文本形式:操作系统文件库、通用文档管理系统、传统数据库 BLOB/CLOB 列;缺点=无法获取结构化数据、查询只能返回原始文档);数据库存储方式(可管理结构化/半结构化数据、可操作文档内部数据、支持多用户并发与一致性约束)。
物联网三层架构: 1. 感知层:识别物体、采集信息;设备=二维码标签和识读器、RFID 标签和读写器、摄像头、GPS、传感器、M2M 终端、传感器网关;类似人体皮肤和五官;关键技术=检测技术、短距离无线通信技术。 2. 网络层:传递信息和处理信息;包括通信网与互联网的融合网络、网络管理中心、信息中心、智能处理中心;类似神经中枢和大脑;关键技术=长距离有线和无线通信技术、网络技术;云计算平台是其重要组成。 3. 应用层:实现广泛智能化;按形态分两个子层=应用程序层(数据处理)+终端设备层(人机接口);应用分四类=监控型(物流/污染监控)、查询型(智能检索/远程抄表)、控制型(智能交通/智能家居/路灯控制)、扫描型(手机钱包/高速公路不停车收费)。
工作流参考模型 5 个接口:interface1 过程定义导入/导出(WPDL→XPDL);interface2 客户端应用程序接口;interface3 应用程序调用接口;interface4 工作流机协作接口(4 个协同工作模型);interface5 管理和监视接口。
判据
- 污水池判据(二八原则):穿层无业务逻辑的请求占比 >20% → 应考虑让一些层变成开放的。
- ACID 判分口径:原子性=事务中任何失败导致所做修改失效;一致性=失败时受影响数据恢复到执行前状态;隔离性=提交前对其他事务不可见;持久性=已提交数据状态正确。
- 事务使用守则:三种事务类型(JDBC、JTA、容器管理事务)不要在程序中同时使用(如 JTA 嵌套 JDBC);事务尽可能短时间完成,不要在不同方法中实现。
- 业务逻辑层实体设计约束:不直接访问数据库(访问由数据访问逻辑组件提供);不启动任何事务处理(由使用它的应用/业务过程启动)。
案例
- PetShop 电子商务网站:微软展示 .Net 能力的范例;2.0 无清晰数据访问层→3.0 独立出 DAL→4.0 引入缓存、异步处理(MSMQ)和 MemberShip;核心是"面向接口编程"(IDAL/DALFactory/SQLServerDAL/OracleDAL)实现数据库无关与松耦合(13.7.1)。
- 基于物联网架构的电子小票服务系统:感知层小票智能硬件(STM32+TFTLCD+Wi-Fi/GPRS)取代传统小票打印机,采集收银数据上传云平台;网络层负责传输处理存储;应用层经微信公众平台向顾客推送小票、向商家提供数据服务(13.7.2)。
数据
- 1993 年成立工作流管理联盟(WFMC)。
- 污水池反模式阈值:穿层请求占比超过 20% 需开层。
- PetShop 4.0 基于 .Net 2.0;PetShop 3.0 才将数据访问逻辑独立成层。
- XML Schema 规范三部分:Part0 Primer(非标准化文档)、Part1 Structures、Part2 Datatypes;XML Schema 将逐步替代 DTDs。
易错点 / 边界情况
- 分卷头部混入目录行(页码尾缀如"··405"),已排除。
- 层次划分没有硬性规定:小应用可合并业务层与持久层,大应用可加调外部服务的层。
- 分层不是银弹:可能带来分布模式复杂、健壮性下降、可靠性/性能不足、代码规模膨胀。
- MVC 三角色职责辨析:视图不进行实际业务处理、不能改变模型;模型可为多个视图提供数据;控制器是用户界面与 Model 的接口。
- MVP ≠ MVVM:MVP 靠 Presenter 中转(单向),MVVM 靠 DataBinding 双向绑定;MVVM 出问题难定位来源。
- 在线访问 vs 离线数据模式:前者全程占用连接,后者取数后独立于连接与事务操作。
- DTO 设计两选择的取舍:内置集合(省代码但弱类型、编译期查不出错误)vs 自定义类(强类型编译检查但编码量大)。
- XML 与 HTML 分工:HTML 控制数据的显示和外观,XML 定义数据本身的结构和数据类型;表现层技术仍是 HTML 唱主角。
- Hibernate 两种运行方式:轻型体系(应用提供 JDBC 连接、自管事务,用最小子集)vs 全面解决体系(JDBC/JTA API 全被抽象,Hibernate 管所有细节)。
- 物联网三层各自类比勿混:感知层=皮肤和五官;网络层=神经中枢和大脑;应用层=社会分工。
- ETC、超市仓储、机场行李分类属感知层(RFID 应用);手机钱包、不停车收费属应用层的扫描型应用。
- JDBC 事务默认 auto-commit:每条 SQL 单独成一个事务,组合事务必须先 setAutoCommit(false)。