知识卡片
面向演进用客户端端口解耦跨上下文调用
内容
即便当前是进程内通信,也不应在一个上下文的领域服务里直接实例化另一个上下文的应用服务对象。正确做法是在本上下文的南向网关定义客户端端口(如NotificationClient)并由适配器实现,领域服务依赖端口、注入适配器。这样一旦未来把被调用上下文演进为进程间通信,变动只影响本上下文的南向网关适配器,其余内容不受影响。发散:端口-适配器在这里的价值不是”当下解耦”,而是”为将来通信边界的迁移预留一个只需改一处的接缝”。
参考来源
- 位置:《解构领域驱动设计》第18章《领域驱动设计的战略考量》18.1.1(源文件:_epub-src/OEBPS/031.xhtml)
- 结论依据:原文以项目上下文调用通知上下文为例,说明通过客户端端口与适配器隔离,使未来通信边界变化只影响南向网关适配器。
- 原始内容:我们就不能在SprintBacklogService服务中直接实例化NotificationAppService对象,而是……定义南向网关的客户端端口NotificationClient……该变动只会影响项目上下文的南向网关适配器。