基于特定领域的软件架构开发(DSSA):把行业经验“固化成架构资产”

37 阅读10分钟

基于特定领域的软件架构开发(DSSA):把行业经验“固化成架构资产”

DSSA(Domain Specific Software Architecture)想做的事是:
不再每家公司都从零设计一套类似的架构,而是把某个行业 / 领域的共性,沉淀成可复用的“领域架构”。

这篇帮你看懂 DSSA 的三件事:

  • 什么是“特定领域架构”,和一般架构有什么区别?
  • 三步走:领域分析 → 领域设计 → 领域实现;
  • 如何在真实项目里用 DSSA(以电商 / 票务为例),以及在面试里怎么讲。

一、为什么需要 DSSA:问题域 vs 解决域

在很多重复建设的行业里,你会发现:

  • 业务看上去不一样,但问题本质上很像
    • C2C / B2C 电商;
    • 二手车 / 二手房 / 二手电子产品;
    • 各种票务系统、金融交易系统……

这些行业里:

  • 数据对象类似:用户、订单、商品、库存、支付、物流……
  • 业务流程类似:浏览 → 下单 → 支付 → 履约 → 结算……
  • 非功能诉求类似:高可用、高一致性、风控、安全、合规……

DSSA 的核心思想是:

针对某个“特定领域”(Domain),把共性问题抽象出来,形成一套通用的、可复制的架构模型和构件库。
以后再遇到同类企业 / 同类产品,可以直接复用和剪裁,而不是重造一遍轮子。

这背后有两个关键概念:

  • 问题域(Problem Domain)

    • 某个业务领域里的经典问题集合;
    • 比如“B2C 中小商品电商”:商品目录、订单、发票、物流、库存、资金流等。
  • 解决域(Solution Domain)

    • 针对这些问题,已经被证明可行的解决方案模式和架构构件;
    • 比如通用的库存子系统、结算子系统、优惠引擎、风控引擎、用户子域的划分方式等。

做得好的 DSSA 就是:
用问题域驱动解决域设计,再用解决域反复复用、剪裁,反过来支撑问题域里的各种项目。


二、DSSA 的三步走:分析 → 设计 → 实现

1. 领域分析:站在“未来行业老大”的视角看问题

和 ABSD 不同,DSSA 的起点不是“这次项目要做什么”,而是:

  • 假设你要在某个细分行业里做成头部玩家
  • 你会怎么理解这个行业的典型业务模式和问题?

以一个 B2C 中小商品电商为例,领域分析会做的事包括:

  • 识别主要子域(Subdomain):

    • 商品目录;
    • 订单;
    • 发票;
    • 物流 / 履约;
    • 库存;
    • 资金流 / 支付。
  • 分析每个子域的边界与关系:

    • 谁是核心(Core Domain);
    • 谁是支撑(Supporting Domain);
    • 谁是通用(Generic Domain)。
  • 思考行业特性:

    • 商品更新快(例如从打火机、电子烟到口罩的快速切换);
    • 有淡旺季,存在库存 / 资金压力;
    • 不同渠道(线上、线下、代理等)的联动方式。

在这个阶段,DSSA 会:

  • 引入多角色参与(四条腿):

    • 领域专家(对业务极熟的专家 / 产品);
    • 领域分析人员(懂业务也懂 IT 的桥梁角色,可能是企业架构师 / 产品架构师);
    • 领域设计人员(应用架构师 / 资深工程师);
    • 领域实现人员(开发工程师)。
  • 结合多种分析方法:

    • 领域驱动设计(DDD)的用例分析 / 四色建模 / 事件风暴(Event Storming);
    • 甚至加入现有企业架构框架(EA)的视角和管理机制。

目标是得到:
对这个领域的“共性问题”的清晰认知,而不仅仅是“这次项目的需求列表”。

2. 领域设计:把抽象的“领域”变成可画图、可实现的模型

在分析的基础上,领域设计会输出一批“工件”(Artifacts):

  • 领域边界与子域划分模型

    • 哪些子域是核心,哪些是支撑 / 通用;
    • 子域之间的数据 / 事件 / 依赖关系。
  • 领域内的功能 / 约束模型

    • 每个子域负责哪些功能?
    • 有哪些质量目标(吞吐、高可用、弹性、数据一致性……)?
    • 有哪些约束(法规、企业策略、技术栈限定……)?
  • 具体架构模型

    • 可以是六边形架构、分层架构、面向服务架构等的组合;
    • 包含高层架构图、子域内部模块图、类图 / ER 图等。
  • 一套标准的工具与技术栈建议

    • 推荐用什么语言 / 框架 / 中间件;
    • 本领域常见的“最佳实践组合”;
    • 甚至提供脚手架与模板工程。

领域设计的节奏是迭代式 / 螺旋式上升

  • 一开始模型会比较抽象(适用于整个行业);
  • 随着某家企业 / 某个项目的具体落地,再不断精化出更贴合实际的变体;
  • 同时保留共性部分,继续作为领域级资产。

3. 领域实现:实现要“复用优先 + 可持续迭代”

在实现阶段,DSSA 提醒你三件小事:

  • 能复用就复用

    • 现有的通用组件、服务、模板,优先拿来剪裁;
    • 不轻易重造轮子。
  • 一旦写新东西,就要写成“将来可被复用”的样子

    • 不要只解决这次项目的特例问题;
    • 有意识地抽象出未来其他项目 / 公司也可能用到的部分。
  • 整个过程要支持持续集成 / 持续交付(CI/CD)与演进

    • 用标准的主干开发 + 持续集成,让领域架构“活着演进”;
    • 重要的架构演进节点要打 tag / 分支,便于以后“演进分叉”和版本管理。

从宏观看,DSSA 不是一次性项目,而是持续养成一个领域资产库的过程


三、电商票务系统案例:DSSA 怎样“拆”一个复杂业务

书中用了一个国际票务平台的案例,帮助你把 DSSA 从抽象拉回实战。

1. 背景:票务 + 上云 + 架构重构

  • 一家国际电商品牌,做体育赛事票务(类似 NBA 门票);
  • 计划在 2~3 年内:
    • 完成企业架构的整体重构;
    • 把传统数据中心迁往云上;
    • 同时保持业务持续运行。

这个就是一个典型的“行业内复杂业务 + 上云重构”的 DSSA 适用场景。

2. 领域分析:划分支撑子域与核心子域

分析后,最终将领域分成两大块:

  • 通用支撑子域(Supporting Subdomains)

    • 数据平台(数据仓库 / 数据湖 / 数据管道);
    • 数据科学(机器学习、预测、推荐等);
    • 负载管理(CDN、API 网关、限流、熔断等);
    • 内容管理(赛事页面、广告位、图文内容);
    • 消息通知(短信、邮件、Push、站内信);
    • 基础架构(云网络、虚机、容器、Serverless);
    • 应用平台(搜索引擎、任务引擎、消息队列等);
    • 质量保障(测试、性能测评、演练等);
    • 集成与发布(CI/CD 全链路、灰度、回滚);
    • 遥测与监控(监控、日志、链路追踪);
    • 合规与审计(多地区法律合规、安全渗透、审计日志)。
  • 核心子域(Core Subdomains)

    • 买(Buy):购物车、下单终端(包括现场购票机);
    • 支付(Payment):买家支付、卖家结算、资金留存、汇差处理;
    • 履约(Fulfillment):电子票生成、纸质票配送、座位管理;
    • 供票 / 购票(Inventory Supply):从球队、投资方、小卖家等拿票;
    • 市场(Marketing):线上线下活动、渠道合作、推广策略;
    • 风控(Risk Control):异常价格、一票多卖、洗钱行为检测等;
    • 客服(Customer Service):客户信息、偏好、呼叫中心等;
    • 发现(Discovery):
      • “导流”能力,包括 SEO / SEM、站内搜索权重;
      • 首页、个性化推荐、用户主页等;
    • 对账(Reconciliation):和合作方 / 投资方的财务对账;
    • 产品与定价(Product & Pricing):
      • 赛事(时间、地点、主办方);
      • 座位类型、套餐组合、差异化定价等。

一个有意思的点是:

  • 传统“用户子系统 / 订单子系统”被拆散了
    • 用户相关数据拆分进:支付域、购买域、供票域、发现域等;
    • 订单相关逻辑拆进:购买域、履约域、风控域等。

这样做,是为了:

  • 减少“巨无霸用户中心 / 订单中心”带来的强耦合;
  • 更贴近领域边界,真正做到按业务能力划分子域

3. 领域设计与实现:从子域到具体架构工件

在上述划分基础上,DSSA 会:

  • 为每个子域设计:

    • 责任边界、输入输出(API / 事件)、数据模型;
    • 所需的质量属性(可用性 / 一致性 / 延迟 / 弹性);
    • 推荐使用的技术组合(如搜索用 ES、通知用 MQ + 多渠道网关等)。
  • 输出一套完整的“领域工具包”:

    • 参考架构图(总览 + 子域图);
    • 用例图、类图、ER 图、聚合模型等;
    • 一键搭建的脚手架(项目模板、基础库)。

然后在一个或多个真实项目上:

  • 选关键子域做 POC / 原型实现
  • 在云环境中实际部署、压测、演练;
  • 迭代更新领域模型与构建库。

最终得到的是一套“针对票务电商领域”的完整 DSSA 资产,可以:

  • 应用到该公司内部的其他票务 / 周边产品;
  • 也可迁移到其他地区、其他赛事、甚至类似的活动票务场景。

四、DSSA 在面试中的用法:三类问题可以这样答

原文最后给了三个很典型的面试题,你可以用 DSSA 思路来组织回答。

  • Q1:在大型架构设计中,你的职责是什么?怎么和其他部门配合?

    • 可以从 四类角色 角度讲:
      • 如何作为领域设计人员,连接领域专家 / 分析人员 / 实现团队;
      • 你在领域分析、子域划分、模型设计、落地推进中的具体职责;
      • 你怎样把业务、应用、中间件、基础设施几个层面的同事“串在一起”。
  • Q2:你对领域架构(Domain Architecture)的理解?

    • 用票务 / 电商 / 自己公司业务做例子:
      • 先描述业务领域特性;
      • 再讲怎么划子域、划核心 / 支撑 / 通用域;
      • 讲清楚领域之间如何通信、如何保证高内聚 / 低耦合;
      • 最后点出你用过的 DDD / DSSA / Event Storming 等方法。
  • Q3:请描述一下你们公司的业务模型。

    • 这是“领域划分 + DSSA 视角”的大题:
      • 画一张自己的领域子域图(核心域 / 支撑域 / 通用域);
      • 简要说明每个域的职责和典型系统;
      • 挑 1~2 个“重构点”或“创新点”展开说你是如何参与架构设计与演进的。

面试官真正想听到的,不是你背了几个术语,而是:
你能不能把复杂业务“拆清楚”,并用一套可复用的方法论把它落地。


小结:什么时候值得引入 DSSA 思维?

当你遇到这些情况时,可以考虑 DSSA:

  • 你所在的行业 / 部门,会不断做 极其相似的新系统 / 新项目
  • 公司已经有不少积累,但没有“体系化”的领域资产,大家还在各自造轮子;
  • 你开始思考:
    • 能不能把这些项目中共用的“领域认知 + 架构设计 + 模块实现”
      沉淀成一套领域级资产

此时,DSSA 给你的不是一套“银弹”,
而是一种视角:

  • 不只是完成这一个项目,而是为整个领域做一套可复制 / 可演进的架构资产。

当你在团队 / 部门中开始推动这类事情时,你的角色,已经不只是“项目架构师”,而是在向“领域架构师 / 企业架构师”靠近了。