将数据和对这些数据进行操作的方法放在一个类中的机制称为封装。
但是要遵循Open/Closed
原则,Dependency injection
是通过暴露公共属性来实现的。
在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?
将数据和对这些数据进行操作的方法放在一个类中的机制称为封装。
但是要遵循Open/Closed
原则,Dependency injection
是通过暴露公共属性来实现的。
在这种情况下,封装和依赖注入似乎相互矛盾,不是吗?
这里有两件不同的事情需要考虑。让我们使用一个简单的“Person”示例。
一个人的属性可能包括名字、姓氏、出生日期等。为了保持封装,这些可能是私有的。如果你需要这个人的年龄,你必须让 Person 对象给你年龄,它会使用它的私有 dateOfBirth 来计算年龄。这可以防止在系统中的许多地方重复获取一个人的年龄的逻辑,如果 dateOfBirth 是公开的,这可能会受到鼓励。
Person 对象也可能依赖于其他对象。人不是自己创建这些对象,而是依赖系统中的其他实体来创建依赖项并将它们传入。Person 对象可能会公开公共属性来保存这些依赖项(或设置依赖项的方法)——这些不是一个人的属性,它们是一个人的依赖项。
这实际上是仅在一个地方拥有逻辑的另一个示例 - 您的系统中有一个“事物”可以创建依赖项,而不是让许多对象都为自己创建该依赖项。
没有,不代表Encapsulation
没有公共接口。
Encapsulation
意味着只能通过公共的特定接口访问私有成员。
依赖注入通过设置器“注入”所需的对象public
。