Skip to content

Day 04 - 战略设计:子域划分与核心域识别 ​

📖 今日目标 ​

  1. 理解子域的概念和分类
  2. 掌握核心域的识别方法
  3. 学习如何平衡不同子域的投入

核心概念 ​

子域(Subdomain) ​

子域 是将整个业务领域划分为多个更小、更易管理的部分。每个子域代表业务中的一个特定关注领域。

子域的分类:

  • 核心域(Core Domain):业务的灵魂,是核心竞争力所在
  • 支撑域(Supporting Subdomain):支撑核心域的业务功能
  • 通用域(Generic Subdomain):可以购买或复用的通用功能

核心域的重要性 ​

没有核心域的业务,就像没有灵魂的躯壳

核心域特点:

  • 为企业带来差异化竞争优势
  • 需要最深入的业务理解和最佳的技术投入
  • 不应该被外包或妥协

关键要点 ​

1. 子域划分的方法 ​

自顶向下法:

  1. 定义业务的整体边界
  2. 识别主要的业务能力
  3. 将每个业务能力作为一个子域
  4. 确定每个子域的类型

自底向上法:

  1. 列出所有业务流程和功能
  2. 按业务相关性分组
  3. 识别每个组的核心价值
  4. 确定子域边界和类型

2. 三种子域的特征 ​

类型特征投入建议
核心域差异化竞争力、复杂业务逻辑、持续演进投入最优秀的人才、最多的资源
支撑域支持核心功能、无差异化需求可以用简单方案实现
通用域通用功能、变化少、无战略价值直接购买或使用开源

3. 核心域识别标志 ​

以下特征帮助识别核心域:

  • 客户选择我们的原因是什么?
  • 竞争对手难以复制的部分是什么?
  • 如果这个功能做不好,业务会失败吗?

4. 资源分配策略 ​

常见错误:

  • ❌ 所有子域均匀投入
  • ❌ 在通用域投入过多
  • ❌ 核心域使用简单方案应付

正确做法:

  • ✅ 核心域优先,投入最好的资源
  • ✅ 支撑域简化,能用就行
  • ✅ 通用域购买,不重复造轮子

5. 子域与限界上下文的关系 ​

  • 一个子域可能对应一个或多个限界上下文
  • 核心子域通常对应核心限界上下文
  • 通用子域可能跨多个限界上下文使用

面试考点 ​

问题1:核心域、支撑域、通用域的区别是什么? ​

答案:

三者的区别体现在业务价值和技术投入上:

  1. 核心域:

    • 代表业务的灵魂和核心竞争力
    • 包含真正区分企业与其他竞争对手的业务逻辑
    • 需要最深的专业知识和最佳的技术实现
    • 例子:电商的推荐系统、银行的风控系统
  2. 支撑域:

    • 为核心域提供支持,但本身不提供差异化
    • 需要定制开发,但复杂度相对较低
    • 例子:电商的订单管理、库存管理
  3. 通用域:

    • 适用于任何业务的通用功能
    • 无战略价值,可以直接购买或使用开源
    • 例子:用户认证、日志记录、发送邮件

关键区分:问自己"如果这个功能做不好,会影响客户选择我们吗?"如果答案是"会",那很可能是核心域。


问题2:如何在资源有限时平衡各子域的投入? ​

答案:

资源有限时的投入策略:

  1. 核心域优先:

    • 集中资源确保核心域的质量
    • 宁可其他部分简单,也不能妥协核心域
  2. 支撑域简化:

    • 用最简单的方式实现支撑功能
    • 不要过度设计
  3. 通用域购买:

    • 直接使用成熟的解决方案
    • 例如:认证用Keycloak、日志用ELK
  4. 持续审视:

    • 随着业务发展,子域类型可能变化
    • 曾经的核心域可能变成支撑域
    • 需要定期重新评估

反面教材:把最优秀的工程师去做登录功能,而让实习生做核心的推荐算法。

实践思考 ​

🎯 思考题:

以一个在线教育平台为例:

  • 课程内容管理
  • 用户学习进度追踪
  • 在线支付
  • 视频播放
  • 智能推荐
  • 用户社区

请分析:哪些是核心域?哪些是支撑域?哪些是通用域?并说明理由。


📚 扩展阅读 ​


📅 学习进度 ​

Day主题状态
01DDD初识:什么是领域驱动设计✅
02战略设计:限界上下文与上下文映射✅
03战略设计:通用语言与领域建模✅
04战略设计:子域划分与核心域识别✅
05事件风暴工作坊⬜
.........
30复习与总结⬜

本文为DDD 30天学习计划第4天内容 ​

📚 导航 ​

| ← Day 03 - 上一章 | Day 05 - 下一章 →

最后更新: