Fork me on GitHub
DDD

核心域的模式

Core Domain Patterns

Posted by Kaelzhang on July 8, 2020

时间和资源是有限的。在开发软件系统时,我们如何花费时间并利用资源是最根本,最困难的挑战。在我们可能做的所有事情中,我们应该做什么,又应该投资多少到质量上?

对于软件工程师来说,更喜好于迎接有趣的技术挑战。

然而遵循领域驱动设计方法的开发人员通过一个被称为核心域的概念能实现平衡。核心域是系统中具有最高业务投资回报率的部分。

作为开发人员,应该重点寻找核心域,以帮助我们专注于实现最大的价值,而不是被技术上有趣但投资回报率低的功能所吸引。

核心域伴随着支撑域通用域。支持域是业务必需品,它们包含与该域相关的业务概念,但是投资回报率有限。通用域表示的是领域中不唯一的概念,例如用户身份,发送电子邮件,付款等—应该考虑购买SaaS或使用开源软件来替代自建通用域。

为了让这些概念更加清晰化,结构化和量化,使之更易于理解和应用,推荐使用以下基本可视化方法:

图1 通过识别高复杂性和业务差异来提取核心域

根据此定义,核心域是具有高度业务差异性机会的领域区域。这代表了引人注目的ROI。另外,实现必须至少具有合理的复杂度(模型复杂度)。如果一个简单的数据表格解决方案(又名CRUD)就足够了,那么就不应该浪费时间进行过度的设计。

使用这种可视化方法,可找到指导现在和将来的技术策略和软件开发投资模式。

决定性核心域

图2 决定性的核心域

当核心域极其复杂并提供最大的业务差异化潜力时,这是决定性的能力,具有决定性意义。无论哪个组织拥有这项权利,都有可能成为行业领导者。高度的复杂性表明需要大量投资才能取得成功。

短期核心域

图3 短期核心域

当核心域具有高分化潜力以及低复杂性时,则可能是短期核心域。由于复杂性低,无法形成商业壁垒,竞争者将在相对较短的时间内赶上。

隐藏核心域

图4 隐藏核心域

隐藏核心域是需要警惕的潜在反模式。如果上下文的复杂性较低,并且是一个简单的数据表单的CRUD系统,那么它就不是进行创新的核心领域。

但是,如果此功能代表着与企业不同的东西,我们应该提防:竞争者很容易就能赶上,或者企业缺少更大的机会(例如,复杂性仍然由员工手动处理,软件系统只是在替代了纸张,而未替换全部手工流程)。

赌注式前核心域

图5 赌注式前核心域

任何创新的自然生命周期都是:随着时间的流逝,它变成了赌注,不再是与众不同的创新,但仍必须具备。

还记得第一波商店和饭店开始接受手机支付吗?其便捷性颠覆了购物、餐饮的商业模式。而对于现在则是人们习以为常的支付方式。

商品化核心域

图6 商品化核心域

与赌注式前核心类似,但更彻底的是,曾经的核心域可以变成一种通用功能,任何公司都可以通过SaaS产品或开源工具方式轻松地使用。

商品化核心的一个示例是搜索引擎。如果你的产品依靠高级搜索功能来与竞争对手区分开来,那么像Elasticsearch这样的先进的开源软件和SaaS搜索引擎的出现将使你的优势不再,任何潜在的竞争对手都能具备与你竞争的能力。

黑天鹅核心域

图6 黑天鹅核心域

有时,完全出乎意料的事情发生了,一般的商业产品可能成为核心域,例如:Slack。

Slack开始仅是一家视频游戏公司的内部聊天系统。当视频游戏未能产生收入时,该公司决定将其聊天系统转变为产品。Slack现在的价值为130亿美元。

IRC是一个既定的聊天标准,似乎没有什么分化潜力。没有人看到机会,人们都在使用该产品。

大赌注核心/颠覆式核心域

图7 大赌注核心域

对于许多计划来说,业务差异化的潜在水平是未知的。直到产品交付并获得市场反馈之前,无法确定。

由于潜力巨大,可能会颠覆整个行业,因此这种能力可能是一个大赌注,因为组织必须注入大量资源,并使其成为主要关注点,因为相信ROI可能是巨大的。

可疑的支撑域

图8 可疑的支撑域

如果限界上下文非常复杂但又仅为支撑域,则应提出严肃的问题:业务差异性较小的产品为何需要如此高的投资来管理复杂性?

一个合理的解释理由是偶发复杂性太高了-也许是从旧系统迁移到新系统。应该制定降低复杂性的清晰计划和时间表,以确保将浪费的精力重新分配给具有更高分化潜力的功能。

进入下一个层次

评估限界上下文来区分业务差异和复杂性是一个非常实际和可操作的起点。对于不了解其架构如何与业务模型联系的团队,该技术在使开发人员能够更多地考虑业务视角,尤其是随着时间的推移而发展方面具有极其有用的作用。

要了解功能为何会随着时间的推移在差异化和复杂性方向演变,可研究Wardley Mapping和Cynefin框架。

了解不同类型的复杂性(本质复杂性、偶发复杂性以及偶发性复杂性的各个子类别)也很重要。

参考文献

  1. https://medium.com/nick-tune-tech-strategy-blog/core-domain-patterns-941f89446af5

  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!