Day29-01|7.5.1 DSSA 的定义:面向特定领域的软件体系结构
Day29-01|7.5.1 DSSA 的定义:面向特定领域的软件体系结构
一、教材定位
DSSA 是 Domain-Specific Software Architecture 的缩写,中文通常译为“特定领域软件体系结构”。它是第7章“软件架构复用”的重要落点,也是高级系统架构设计师考试中连接架构复用、产品线工程、领域建模和案例分析的知识点。学习 DSSA 不能停留在“针对某个行业设计一套架构”这句话上,而要理解它如何从一个领域的共性需求和变化规律中提炼出可复用的体系结构,并支持多个相近应用快速构建。
二、DSSA 的基本定义
特定领域软件体系结构,是针对一个特定应用领域,以领域需求、领域知识和领域约束为基础,抽取领域内多个应用系统的共性需求,识别可变点,形成能够支持一组应用开发的参考架构、构件、接口、设计规则和实现约束。
这里有三个关键词:
| 关键词 | 含义 | 例子 |
|---|---|---|
| 特定领域 | 业务边界明确、应用具有相似性 | 金融支付、车载控制、政务审批 |
| 共性 | 多个应用都会出现且相对稳定的能力 | 用户、权限、审计、流程 |
| 可变性 | 不同应用之间需要配置或扩展的部分 | 业务规则、报表、设备协议 |
DSSA 的目标不是建立一个“任何场景都能用”的万能架构,而是限定在一个领域内,用适度的通用性换取复用效率。领域太宽,共性会变少、抽象会变重;领域太窄,复用收益不足、建设成本难以摊薄。
三、DSSA 与普通参考架构的区别
普通参考架构通常描述某类系统建议采用的分层、组件和部署方式,例如企业应用参考架构可以包含表示层、业务层、数据访问层和基础设施层。DSSA 比一般参考架构更强调领域语义、领域共性、可变点和可复用资产。它不仅回答“系统如何组织”,还回答“同一领域的多个应用哪些部分相同、哪些部分不同,以及变化如何被承载”。
| 对比维度 | 通用参考架构 | DSSA |
|---|---|---|
| 适用范围 | 较广 | 特定领域 |
| 核心来源 | 技术经验和通用原则 | 领域知识与多个应用经验 |
| 主要内容 | 层次、组件、部署建议 | 共性、可变性、领域构件和约束 |
| 复用目标 | 指导架构设计 | 支持一组领域应用快速构建 |
| 评价重点 | 技术合理性 | 领域覆盖度、可变性和复用收益 |
四、DSSA 的组成
DSSA 通常由四类内容共同构成。
第一是领域模型,描述领域概念、角色、业务规则、数据关系和业务流程。例如物流领域需要识别运单、仓库、承运商、线路、节点和签收等概念。领域模型是架构抽象的业务基础。
第二是参考需求,提炼多个应用共有的功能需求和质量属性需求。例如所有支付系统都需要交易受理、风控、对账、异常处理和审计,但不同机构的清算规则可能不同。
第三是参考架构,描述系统的子系统、层次、职责、接口、协作关系、数据边界、部署方式和质量属性策略。参考架构不是一张静态框图,而是一组经过说明和约束的架构决策。
第四是可复用资产,包括领域构件、框架、模板、接口协议、测试用例、配置规则、部署脚本和文档。资产必须说明适用范围、依赖、扩展方式、版本和已知限制。
五、领域工程与应用工程
DSSA 通常建立在两个相互衔接的工程活动之上:领域工程和应用工程。
领域工程负责研究某个领域,发现多个现有系统或预期系统的共性和变化性,建立领域模型,设计 DSSA,开发可复用构件,并维护领域资产库。它面向“这一领域的系统通常应该怎样构建”。
应用工程负责使用领域工程形成的 DSSA 和资产,针对具体客户或具体产品实例化应用,完成需求确认、可变点选择、构件装配、定制开发、测试和部署。它面向“这个具体系统如何落地”。
领域知识与多个应用经验 ↓ 领域工程 共性分析、可变性分析 领域模型、DSSA、资产库 ↓ 应用工程 选择变体、装配构件、补充开发 ↓ 具体领域应用
两者不能混淆。如果每个项目都独立抽象一次,就没有形成真正的领域工程;如果只建设领域平台而不根据项目需求实例化,也不能产生可运行应用。高级案例中,题目常给出多个相似项目,要求说明哪些活动属于领域工程,哪些属于应用工程。
六、DSSA 的共性与可变性
共性分析要找出多个应用共有的业务能力、数据概念、交互流程、质量目标和技术约束。共性不是“看起来相似”,而是能够在多个应用中稳定复现,并且复用不会破坏业务语义。
可变性分析要找出不同应用之间的差异,并说明差异如何表达。常见表达方式包括配置、规则、参数、插件、继承、模板、策略对象、接口适配和替换构件。例如,审批系统的审批节点数量可以通过流程配置变化,风险评分规则可以通过策略插件变化,外部身份认证方式可以通过适配器变化。
| 变化类型 | 适合的承载方式 | 示例 |
|---|---|---|
| 少量参数差异 | 配置 | 超时、阈值、编号规则 |
| 规则经常变化 | 规则引擎或策略 | 风控、计费、审批规则 |
| 协议不同 | 适配器 | 银行、设备、供应商接口 |
| 功能模块可选 | 插件或构件组合 | 报表、支付、消息通道 |
| 流程结构不同 | 流程模型或模板 | 审批、生产、售后流程 |
一个常见错误是把所有变化都做成配置项。过度配置会让系统难以理解、难以测试,运行时错误也不容易发现。变化频率高、规则复杂时,应该使用明确的策略接口或领域扩展点,而不是堆积大量布尔参数。
七、DSSA 的边界与约束
DSSA 需要明确领域边界。边界包括业务范围、组织范围、数据所有权、核心流程、质量目标和外部依赖。领域边界太宽,会把不稳定的业务差异强行抽象到平台中;边界太窄,又无法形成足够的复用收益。
同时要明确架构约束,例如所有领域服务必须通过统一身份认证,领域事件必须包含事件编号和版本,敏感数据必须加密,构件不得直接访问其他构件的数据库。约束的作用是保证多个应用在复用资产时仍保持一致的质量和治理水平。
八、DSSA 的收益与代价
DSSA 的收益包括:缩短同领域新系统的设计和开发周期;复用经过验证的领域知识和质量属性策略;降低重复建设成本;提高产品之间的一致性;支持产品线和平台化演进;让组织经验从个人记忆转化为可维护资产。
它的代价包括:前期需要投入领域分析和资产建设;需要协调多个项目和领域专家;抽象不当时会造成平台过度复杂;共性资产升级可能影响多个应用;领域变化较快时,DSSA 可能很快失效。因此应通过试点项目验证共性,不能在没有足够领域证据时一次性建设“大而全”的领域平台。
九、案例分析:城市政务审批 DSSA
某软件公司为多个政府部门建设审批系统。早期项目分别实现用户、组织、权限、材料上传、流程审批、消息通知和审计,导致代码重复、接口不一致、运维困难。公司开展领域工程,分析多个项目后发现:统一身份、组织权限、材料管理、流程引擎、通知和审计属于稳定共性;审批事项、表单字段、办理时限、部门规则和材料清单属于可变部分。
于是形成政务审批 DSSA:平台核心提供身份、权限、材料、流程、消息和审计能力;事项配置中心承载业务差异;表单引擎提供动态字段;规则插件承载部门级校验;各应用通过标准接口和事件接入平台。新部门建设时只需选择领域变体、配置流程和表单,少量特殊规则通过插件实现。
架构师还必须验证:不同部门的数据是否隔离,跨部门协同是否有授权,流程升级是否影响历史实例,材料访问是否可审计,高峰期集中申报是否满足性能目标。可见,DSSA 不只是抽取公共模块,还要把安全、可维护性、可靠性和部署运维纳入参考架构。
十、考试答题方法
遇到 DSSA 题目,可以按以下顺序作答:
- 先定义领域范围和目标应用集合;
- 从多个应用中提炼共性需求和共性质量属性;
- 识别变化点,并为不同变化选择配置、规则、插件或适配器;
- 建立领域模型和参考架构;
- 设计可复用构件、接口、约束和资产库;
- 在应用工程中选择变体并完成实例化;
- 通过功能、性能、安全、可靠性和可维护性测试验证;
- 将项目中的新共性反馈到领域资产库。
十一、练习题
题1:概念题
什么是 DSSA?它与普通软件架构有什么区别?
参考答案
DSSA 是针对特定领域,基于多个相似应用的共性需求、可变需求和领域约束形成的参考软件体系结构,并配套领域模型、可复用构件、接口、规则和文档,用于支持一组领域应用的快速开发。普通软件架构通常服务于一个系统,而 DSSA 面向一组应用,特别强调领域共性、可变性和复用资产。
题2:分析题
某公司将所有差异都设计成配置项,导致配置文件超过数千项且难以测试。问题是什么?
参考答案
这是过度配置和可变性建模不当。应按变化性质选择承载方式:简单参数使用配置,复杂业务规则使用规则引擎或策略插件,协议差异使用适配器,模块差异使用可组合构件,流程差异使用流程模型。还要建立配置校验、版本管理、灰度发布和回滚机制。
题3:案例题
说明领域工程和应用工程的职责区别。
参考答案
领域工程研究领域范围,分析多个应用的共性和可变性,建立领域模型、DSSA 和资产库;应用工程面向具体项目,选择领域变体,装配复用构件,补充定制开发并完成测试和部署。前者形成可复用能力,后者将能力实例化为具体系统。
十二、论文写作素材
论文中可写:项目面向多个业务相近的应用,团队先开展领域工程,收集已有系统和业务专家经验,提炼稳定共性并识别变化点;随后建立领域模型和参考架构,将身份、权限、流程、审计等能力沉淀为核心资产,将业务规则和外部协议通过配置、策略和适配器承载;在应用工程阶段根据具体项目选择变体并完成实例化;最后通过性能压测、安全评审、故障演练和用户验收验证 DSSA 的有效性。
十三、今日复盘
本节需要掌握四句话:DSSA 面向一个领域的一组应用;DSSA 的核心是共性与可变性;领域工程负责抽象和沉淀,应用工程负责选择和实例化;DSSA 必须同时包含领域模型、参考架构、可复用构件和约束。看到“多个相似系统、产品线、行业平台、共性与差异”时,应立即联想到 DSSA。