gem-universe / blog

0 stars 0 forks source link

[DDD]领域驱动设计 基础篇 #12

Open supergem3000 opened 8 months ago

supergem3000 commented 8 months ago

领域驱动设计

DDD包括战略设计和战术设计两个部分。 战略设计主要从业务角度出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。 战术设计则从技术角度出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根、实体、值对象、领域服务、应用服务和资源库等代码逻辑的设计和实现。

阅读材料:DDD领域驱动设计落地实践系列:战略设计和战术设计_Java_慕枫技术笔记_InfoQ写作社区

领域、子域

领域,就是字面意思,“领域是从事一种专门活动或事业的范围、部类或部门”。范围即边界。 领域可以进一步划分为子领域。每个子域对应一个更小的问题域或更小的业务范围。

核心域、通用域、支撑域

子域可以根据自身重要程度划分为三类子域:核心域、通用域、支撑域。 决定产品竞争力的是核心域;没有太多个性化需求、被多个子域使用的通用功能子域是通用域(举例:认证、授权);必需的但不包含竞争力的功能、也不包含通用功能的是支撑域(举例:数据代码类、数据字典)。 核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。

通用语言、限界上下文

通用语言:团队共识的交流语言 限界上下文:通用语言、领域对象的上下文环境,保证领域内的术语没有二义性。

举例:“能穿多少穿多少”是穿多还是穿少?如果提供了环境寒冬或夏日,这句话的含义就明确了。

实体和值对象

实体,就是通常理解的含义