Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 不';属性依赖项注入违反了封装原则?_Oop_Design Patterns_Encapsulation - Fatal编程技术网

Oop 不';属性依赖项注入违反了封装原则?

Oop 不';属性依赖项注入违反了封装原则?,oop,design-patterns,encapsulation,Oop,Design Patterns,Encapsulation,将数据和操作这些数据的方法放在一个类中的机制称为封装 然而,为了遵循打开/关闭原则,依赖项注入是通过公开公共属性来实现的 在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?否。封装并不意味着没有公共接口。 封装意味着只能通过特定的公共接口访问私有成员。 依赖项注入通过publicsetter“注入”所需的对象

将数据和操作这些数据的方法放在一个类中的机制称为封装

然而,为了遵循
打开/关闭
原则,
依赖项注入
是通过公开公共属性来实现的


在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?

否。
封装并不意味着没有公共接口。
封装
意味着只能通过特定的公共接口访问私有成员。

依赖项注入通过
public
setter“注入”所需的对象 一个人的属性可能包括名字、姓氏、出生日期等。为了保留封装,这些可能是私有的。如果您需要此人的年龄,您必须要求person对象为您提供年龄,它将使用其私有的出生日期来计算年龄。这防止了系统中许多地方重复获取一个人年龄的逻辑,如果出生日期是公开的,这可能会受到鼓励

Person对象也可能依赖于其他对象。人员不是自己创建这些对象,而是依赖于系统中的其他实体来创建依赖项并将其传入。Person对象可能会公开公共属性来保存这些依赖项(或设置依赖项的方法)——这些不是Person的属性,而是Person的依赖项


这实际上是在一个地方有逻辑的另一个例子——你的系统中有一个“东西”可以创建依赖关系,而不是有许多对象都为自己创建依赖关系。

你说“注入鼓励我们将数据公开”是什么意思,只是简单地使用界面。