苏眠月|DDD as Code:如何用代码诠释领域驱动设计?( 二 )
- 战略设计(Strategic DDD):Bounded Context, Context Map; Published Language, Shared Kernel, Open Host Service, Customer-Supplier, Conformist, Anti Corruption Layer (context relationship types) 。
ContextMapper框架介绍
ContextMapper是一个开源项目[3], 主要是为DDD设计提供DSL支持 , 如DDD的战略(Strategic)设计 , Context间映射(Context Mapping) , BoundedContext建模以及服务解耦(Service Decomposition) , 那么我们就看一下如何基于ContextMapper来完成一个项目基于DDD DSL的表达 。
在介绍ContextMapper时 , 我们先交代一下项目背景 。 如花是一名架构师 , 对DDD也非常熟悉 , 而且有过几个项目的DDD实践 , 最近他加入会员线 , 负责完成对会员系统的改造 , 更好地配合公司的微服务化的设计思路 。 会员线之前就是三个应用:会员中心对外提供的大量的REST API服务;会员注册和登录应用;会员中心 , 处理会员登录后如修改个人密码、基本信息、SNS第三方绑定和支付方式绑定等 。
如花加入会员团队后 , 和大家沟通了基于DDD + MicroServices的架构思想 , 大家都表示同意 , 但是如何落实到具体的架构设计和文档上 , 大家就犯难啦 。 让我们看一下最典型的DDD设计图:
其中的概念 , 如SubDomain、BoundedContext、Entity、ValueObject、Service、 Repository、Domain Event , 以及Context映射关系(Context Mapping) , 这些都没有问题 , 但是如何向他人表达这个思想?总不能每次都把DDD设计图和分层图都贴上去 , 然后说我就是按照DDD设计的 。
从SubDomain开始
如花开始DDD的第一步 , 也就是Subdomain的划分 。 当然DDD中包括三种类型的SubDomain , 分别为通用(Generic)、支撑(Supporting)和核心(Core)三种类型 , 这里稍微说明一下这几者的区别:
- 通用(Generic) Domain: 通用Domain通常被认为已经被行业解决的问题 , 如架构设计中的可观测性的Logging、Metrics和Tracing , 各种云服务(Cloud Service)等 , 这些都已经有比较好的实现方案 , 对接就可以 。 当然业务上也有 , 如成熟的行业解决方案 , 如ERP、CRM、成熟硬件系统等 , 你购买就可以啦 。
- 支撑(Supporting) Domain:和通用Domain类似 , 但是系统更来自内部或者还需要在通用的基础上进行一些定制开发 。 如一个电商系统 , 会员、商品、订单、物流等业务系统 , 当然还有一些内部开发的技术类型支撑系统 。
- 核心(Core) Domain: 也就是我们常说的业务核心 , 当然如果是技术产品 , 就是技术核心 , 这个也就是你最要关注的 。
图源:https://github.com/ddd-crew/ddd-starter-modelling-process
推荐阅读
- 苏眠月|5G商用已一年多,当初承诺的红魔三5G战甲迟迟不见踪迹?维权
- 苏眠月|华为发的虚拟男友,你领取了吗?
- 电脑使用技巧|Excel催化剂-Unicode文本及Html转义字符转换
- 苏眠月|尹志尧一语道破国产芯片真相,没谁能独立完成,中国芯有多难?
- 苏眠月|手机批发价目单,华为持续涨价中
- 苏眠月|云手机概念首次提出,光刻机未来是废铁?华为能否扛起大任
- 像梦一样奔驰|谈DDD领域驱动设计和建模
- 苏眠月|最近C++又有什么新花样?六款最新上线的C++开源项目推荐
- 苏眠月|印度抵制小米,真”做到了“,销量前五全是红米!雷军乐了
- 苏眠月|华为回归!