依赖倒置的进一步理解:架构层次跨系统依赖,中台的向上依赖

面向对象的SOLID原则中D特指的就是依赖倒置原则(DIP)。

如果说“开闭原则”是面向对象的目标,那么DIP就是具体的实现机制。

其概念定义如下:

高层模块不应该依赖底层模块,二者都应该依赖其抽象。

简单来说,就是面向抽象编程。

但是另外一个层面来说,应用工程内部还比较容易理解。

但是如果是中台架构话后,应用分层了呢?

这个DIP原则还能适用吗?

业务中台层,能向上调用吗?

1

同一个工程包内的DIP

我们首先来看一下,最简单的单应用内的DIP。

最常见的关系如下:

依赖倒置的进一步理解:架构层次跨系统依赖,中台的向上依赖

这个问题在于,我们是一层层的依赖。并且infrastructure层,为什么是最底层?

DDD的设计中,Domain才应该堵车最底层,最核心的内容。

所以,一般情况下,Domain中给定一系列接口,而infrastructure层、应用层等来实现。

不能向上依调用,但是可以传递过来对Domain层接口的实现。


2

架构层次的DIP

一般来说,一个企业或者大平台的整体架构层次如下:

依赖倒置的进一步理解:架构层次跨系统依赖,中台的向上依赖

这种情况下,业务中台与能力聚合层次肯定都是分开的。

那么业务中台能去调用能力聚合层?

毕竟在一些2B的企业中台,某些场景需要与对方企业进行来回交互才能继续执行。

并且无法做到异步,或者做到异步的场景,实际上还是通过消息的方式而已。

不直接用接口而用消息,是为了切掉向上直接API直接调用的依赖。

但是一些实时要求高的场景,怎么处理?

例如一些融资放款类业务,一些核心企业要求银行在给上下游经销商进行融资放款前,必须调用其接口进行判断是否允许放款。

银行放款的时候也需要占用额度,对于时间的处理要求比较高,而核心企业自己有内部客户的评价管理,一般会实时的给反馈。

那么,融资放款这种业务模型已经放到业务中台的情况下,业务中台是否可以向上调用,通过场景层直接调用到外部企业?

这就涉及到对于DIP依赖倒置原则,进一步的理解,跨系统的理解了。

DIP导致原则的要点是面向抽象编程,而这个抽象,难道仅仅指面向对象语言的接口吗?

如果说业务中台给出了标准的API接口设计,而要求核心厂商去实现给出结果呢?

是不是也是一种面向API级别的抽象?

可以理解为中台定义某个API的标准抽象,然后前台都按照标准实施了具体细节,并执行给出结果?

所以,这里的少数场景下,结合业务身份等扩展点,中台是可以调用外部接口的,并不违反DIP原则。

设置,这也是DIP原则的一种实现。


原文始发于微信公众号(架构突围):依赖倒置的进一步理解:架构层次跨系统依赖,中台的向上依赖

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

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

(0)
小半的头像小半

相关推荐

发表回复

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