聊一下软件设计中防腐层模式

你好,我们刘牌,热爱技术,更热爱生活!

前言

今天分享一下防腐层模式,当两个系统或者服务之间进行交互时,难免会涉及到两个系统接口代码的修改,特别是两个老系统之间进行交互时,如果处理不好,那么可能会影响原有的功能,或者影响代码的逻辑,从而导致系统的维护和运行变得困难,所以我们今天就来分享一下防腐层这个设计理念。

背景

Eric Evans在《领域驱动设计》一书中提出了防腐层(Anti-Corruption Layer)的概念,用于解决在多个系统或模块之间存在的服务契约紧密耦合,导致系统耦合度高、可维护性差的问题。

防腐层的位置处于一个中间层,处于两个或多个不同的系统或模块之间,负责将外部系统的服务契约转换成目标系统的服务契约。防腐层能够在目标系统与外部系统之间建立翻译层,使得目标系统不依赖于外部系统的内部结构,从而消除或降低了系统之间的耦合度。

软件在使用过程中,肯定会出现各种需求的增加,会给别的系统提供数据和服务,也会使用到别的系统的数据和服务,由于系统之间的协议或者其他提供方式等的异同,就会出现一方要兼容另外一方的问题,比如别的系统的某个接口的数据来源增加了,需要我们订阅别人的kafka,而我们的系统接口不能直接消费kafka的消息,别人可能也不愿意给我们提供REST API接口,那么我们就需要建立防腐层,然后再转到我们的API,再比如某些功能需要升级,但是由于其内部过于复杂,修改受影响很大,这时候我们就可以建立防腐层,保持原有逻辑的正常和代码的“干净”.

解决方案

防腐层与外部系统的接口的设计通常采用适配器的方式来设计,将外部服务的请求转换成与目标系统服务接口符合的形式,这样的话就隐藏外部服务的复杂性,同时提供一些关键元数据。这样能够使得外部系统的变化不会直接影响到目标系统的设计,从而极大地提高了系统的可维护性。

从下图可以看出,防腐层位于两个系统之间,系统A和系统B之间存在防腐层,二者之间的请求都需要经过防腐层,这样的话,如果逻辑发生变化,那么直接在防腐层进行修改即可。

聊一下软件设计中防腐层模式

对于它的位置,也就是代码逻辑应该放在哪里,这个是没有标准答案的,这完全需要我们根据自己的实际场景进行分析,我们可以在自己的系统中建立相关的防腐层模块,也可以单独独立出一个防腐服务,然后不同服务和系统之间的修改和适配就直接走这个服务,这样就不会出现服务与服务的依赖。

对于防腐层,不单单只是系统,服务,接口之间,当我们在一些场景下面,对某些功能或者方案无法很好的控制时,都可以采用防腐层的思想。

问题

建立防腐层也并不是一劳永逸,它也会带来一些影响,比如性能肯定会受到影响,因为涉及数据之间的转换,还有一些网络交互,所以导致性能会在一定程度上受到影响,我们需要维护一个防腐层模块,还有其他一些因素都是需要考虑的,总之,软件设计没有银弹,只有选择合适的方式才是最佳的。

今天的分享就到这里,感谢你的观看,我们下期见。

原文始发于微信公众号(刘牌):聊一下软件设计中防腐层模式

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/150616.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!