Appearance
Day 04 - 战略设计:子域划分与核心域识别
📖 今日目标
- 理解子域的概念和分类
- 掌握核心域的识别方法
- 学习如何平衡不同子域的投入
核心概念
子域(Subdomain)
子域 是将整个业务领域划分为多个更小、更易管理的部分。每个子域代表业务中的一个特定关注领域。
子域的分类:
- 核心域(Core Domain):业务的灵魂,是核心竞争力所在
- 支撑域(Supporting Subdomain):支撑核心域的业务功能
- 通用域(Generic Subdomain):可以购买或复用的通用功能
核心域的重要性
没有核心域的业务,就像没有灵魂的躯壳
核心域特点:
- 为企业带来差异化竞争优势
- 需要最深入的业务理解和最佳的技术投入
- 不应该被外包或妥协
关键要点
1. 子域划分的方法
自顶向下法:
- 定义业务的整体边界
- 识别主要的业务能力
- 将每个业务能力作为一个子域
- 确定每个子域的类型
自底向上法:
- 列出所有业务流程和功能
- 按业务相关性分组
- 识别每个组的核心价值
- 确定子域边界和类型
2. 三种子域的特征
| 类型 | 特征 | 投入建议 |
|---|---|---|
| 核心域 | 差异化竞争力、复杂业务逻辑、持续演进 | 投入最优秀的人才、最多的资源 |
| 支撑域 | 支持核心功能、无差异化需求 | 可以用简单方案实现 |
| 通用域 | 通用功能、变化少、无战略价值 | 直接购买或使用开源 |
3. 核心域识别标志
以下特征帮助识别核心域:
- 客户选择我们的原因是什么?
- 竞争对手难以复制的部分是什么?
- 如果这个功能做不好,业务会失败吗?
4. 资源分配策略
常见错误:
- ❌ 所有子域均匀投入
- ❌ 在通用域投入过多
- ❌ 核心域使用简单方案应付
正确做法:
- ✅ 核心域优先,投入最好的资源
- ✅ 支撑域简化,能用就行
- ✅ 通用域购买,不重复造轮子
5. 子域与限界上下文的关系
- 一个子域可能对应一个或多个限界上下文
- 核心子域通常对应核心限界上下文
- 通用子域可能跨多个限界上下文使用
面试考点
问题1:核心域、支撑域、通用域的区别是什么?
答案:
三者的区别体现在业务价值和技术投入上:
核心域:
- 代表业务的灵魂和核心竞争力
- 包含真正区分企业与其他竞争对手的业务逻辑
- 需要最深的专业知识和最佳的技术实现
- 例子:电商的推荐系统、银行的风控系统
支撑域:
- 为核心域提供支持,但本身不提供差异化
- 需要定制开发,但复杂度相对较低
- 例子:电商的订单管理、库存管理
通用域:
- 适用于任何业务的通用功能
- 无战略价值,可以直接购买或使用开源
- 例子:用户认证、日志记录、发送邮件
关键区分:问自己"如果这个功能做不好,会影响客户选择我们吗?"如果答案是"会",那很可能是核心域。
问题2:如何在资源有限时平衡各子域的投入?
答案:
资源有限时的投入策略:
核心域优先:
- 集中资源确保核心域的质量
- 宁可其他部分简单,也不能妥协核心域
支撑域简化:
- 用最简单的方式实现支撑功能
- 不要过度设计
通用域购买:
- 直接使用成熟的解决方案
- 例如:认证用Keycloak、日志用ELK
持续审视:
- 随着业务发展,子域类型可能变化
- 曾经的核心域可能变成支撑域
- 需要定期重新评估
反面教材:把最优秀的工程师去做登录功能,而让实习生做核心的推荐算法。
实践思考
🎯 思考题:
以一个在线教育平台为例:
- 课程内容管理
- 用户学习进度追踪
- 在线支付
- 视频播放
- 智能推荐
- 用户社区
请分析:哪些是核心域?哪些是支撑域?哪些是通用域?并说明理由。
📚 扩展阅读
- 《领域驱动设计》第14章:提炼核心域
- 《实现领域驱动设计》第3章:子域与限界上下文
- Strategic Design - Paul Rayner
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01 | DDD初识:什么是领域驱动设计 | ✅ |
| 02 | 战略设计:限界上下文与上下文映射 | ✅ |
| 03 | 战略设计:通用语言与领域建模 | ✅ |
| 04 | 战略设计:子域划分与核心域识别 | ✅ |
| 05 | 事件风暴工作坊 | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
