大家对 DDD 应该都不陌生了,或多或少都听说过一点,我这里记录一些平常了解学习到关于 DDD 优秀的设计思想
防腐层(Anti-Corruption)
简单说,就是应用不要直接依赖外域的信息,要把外域的信息转换成自己领域上下文(Context)的实体再去使用,从而实现本域和外部依赖的解耦。
平常我们在代码 Coding 运用的一些设计模式,类似 门面模式 都跟防腐层的思想很像
之前我们项目中在权限设计这块也借鉴了防腐层的思想,公司权限系统定义了三个模型:Group、Role、Function,系统在设计按钮功能权限,最初想的直接跟 Role 关联,类似 Save 按钮 开发,测试能够操作,接口设计上 校验 Dev-Role 和 Test-Role 。这样设计有个缺点便是 Save 按钮的权限一旦变更,就需要修改代码,如果我们使用 Function 承担我们系统这个功能的防腐层,则改动就很轻量。上面那个例子,我们定义一个 Save_Function ,它关联了 Dev-Role Test -Role 角色,变更成 TPM - Role ,我们只需要在公司权限管理系统修改 Function 关联关系就可以。
CQRS(查询与命令分离)
是一种设计模式。DDD 中经常被用于分离领域模型命令修改功能与查询功能。
在这一基础是上分析微服务的拆分,目前大型分布式系统,存在业务复杂、数据结构复杂。在富查询面前既要满足服务之间的隔离,又要满足查询功能的全面。为了不污染 DDD 模型保持其干净,
所以单独出来做查询服务。