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 - 下一章 →

最后更新: