我们为什么要将接口与使用它们的类放在一起而不是那些实现它们的类?

Sid*_*war 8 oop design-patterns packages

我正在阅读罗伯特·C·马丁的一篇文章,并在一个地方给出了一个这样的例子:

第一张图显示两个包之间存在循环依赖关系.要删除此依赖项,将在第二个映像中添加新接口.B实现接口,Y使用它.马丁提出以下观点:

接口通常包含在使用它们的包中,而不是在实现它们的包中.

我的问题是,我们为什么要这样安排接口?这种方式包装接口背后的原因是什么?根据Common Closure Principle,一起改变的类应该保持在一起.在变化方面,接口是否更接近其实施者或其用户?

在此输入图像描述

Mar*_*ema 9

从技术上讲,用户并不比实现者更接近界面.在变化方面,当界面发生变化时,都需要改变.

但是,界面为什么会改变?

用户调用接口,因此它可以独立于任何可用的实现者.因此,界面的定义取决于用户的需求.

当用户指定接口的定义时,如果用户不需要接口,则无需更改接口.需要更改接口以适应实现的实现者应该发送红色标记.为什么它需要来自用户的更多或不同的信息?对用户有什么用处?

此外,实现者"仅仅"依赖于接口,因为它需要为接口中的每个方法提供实现.但它可以自由地提供空的存根,实质上是向其客户提供NOP.

因此,用户的需求驱动对接口的更改,并且对接口驱动器的更改将更改为实现者.因此,用户在功能上比实现者更接近界面.这是一个很好的例子来声明与用户的接口而不是实现者.