DDD防腐层概念

在ApplicationService中,经常会依赖外部服务,从代码层面对外部系统产生了依赖。比如:

ItemDO item = itemService.getItem(cmd.getItemId());

boolean withholdSuccess = inventoryService.withhold(cmd.getItemId(), cmd.getQuantity());

会发现我们的ApplicationService会强依赖ItemService、InventoryService以及ItemDO这个对象。如果任何一个服务的方法变更,或者ItemDO字段变更,都会有可能影响到ApplicationService的代码。也就是说,我们自己的代码会因为强依赖了外部系统的变化而变更,这个在复杂系统中应该是尽量避免的。那么如何做到对外部系统的隔离呢?需要加入ACL防腐层。用外观模式(Facade)将外部包一层提供给内部使用,包括接口、DTO,后续外部接口或者返回字段变动主逻辑不需要修改仅需修改对应的facade

ACL防腐层的简单原理如下:

• 对于依赖的外部对象,我们抽取出所需要的字段,生成一个内部所需的VO或DTO类

• 构建一个新的Facade,在Facade中封装调用链路,将外部类转化为内部类

• 针对外部系统调用,同样的用Facade方法封装外部调用链路





©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容