Oop 不';属性依赖项注入违反了封装原则?
将数据和操作这些数据的方法放在一个类中的机制称为封装 然而,为了遵循Oop 不';属性依赖项注入违反了封装原则?,oop,design-patterns,encapsulation,Oop,Design Patterns,Encapsulation,将数据和操作这些数据的方法放在一个类中的机制称为封装 然而,为了遵循打开/关闭原则,依赖项注入是通过公开公共属性来实现的 在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?否。封装并不意味着没有公共接口。 封装意味着只能通过特定的公共接口访问私有成员。 依赖项注入通过publicsetter“注入”所需的对象
打开/关闭
原则,依赖项注入
是通过公开公共属性来实现的
在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?否。
封装并不意味着没有公共接口。
封装
意味着只能通过特定的公共接口访问私有成员。
依赖项注入通过public
setter“注入”所需的对象这里有两个不同的问题要考虑。让我们用一个简单的“人”的例子
一个人的属性可能包括名字、姓氏、出生日期等。为了保留封装,这些可能是私有的。如果您需要此人的年龄,您必须要求person对象为您提供年龄,它将使用其私有的出生日期来计算年龄。这防止了系统中许多地方重复获取一个人年龄的逻辑,如果出生日期是公开的,这可能会受到鼓励
Person对象也可能依赖于其他对象。人员不是自己创建这些对象,而是依赖于系统中的其他实体来创建依赖项并将其传入。Person对象可能会公开公共属性来保存这些依赖项(或设置依赖项的方法)——这些不是Person的属性,而是Person的依赖项
这实际上是在一个地方有逻辑的另一个例子——你的系统中有一个“东西”可以创建依赖关系,而不是有许多对象都为自己创建依赖关系。你说“注入鼓励我们将数据公开”是什么意思,只是简单地使用界面。