2013-04-18 2 views
2

Механизм размещения данных & методы, которые работают с этими данными, вместе в классе называются инкапсуляцией.Не влияет ли инъекция зависимостей собственности на принцип инкапсуляции?

Однако для того, чтобы следовать принципу Open/Closed, Dependency injection достигается путем выставления публичных объектов.

В этом случае инкапсуляция & Инъекционная инъекция кажется противоречащей друг другу, не так ли?

+0

Что вы имеете в виду, когда говорите, что «Инъекция побуждает нас раскрывать данные как общедоступные»? – tbsalling

ответ

3

Здесь есть две разные вещи. Давайте используем простой пример «Человек».

Свойства человека могут включать firstName, lastName, dateOfBirth и т. Д. Чтобы сохранить инкапсуляцию, они могут быть частными. Если вам нужен возраст человека, вам придется попросить объект Person дать вам возраст, и он будет использовать свою приватную дату, чтобы рассчитать возраст. Это предотвращает дублирование во многих местах в системе логики того, как возраст человека дублируется, что может быть поощрено, если dateOfBirth является общедоступным.

Объект Person также может иметь зависимости от других объектов. Вместо того, чтобы создавать сами эти объекты, человек полагается на какой-либо другой объект в системе для создания зависимостей и передает их. Объект Person может публиковать публичные свойства для хранения этих зависимостей (или методов для установки зависимостей) - это не свойства человека, они являются зависимостями человека.

Это на самом деле еще один пример логики только в одном месте - у вас есть одна «вещь» в вашей системе, которая может создавать зависимость, а не иметь много объектов, все создающих эту зависимость для себя.

3

Encapsulation не означает, что нет открытого интерфейса.
Encapsulation означает, что доступ к закрытым членам осуществляется только через специальный интерфейс, открытый.
Инъекционная инъекция «вводит» требуемые объекты через public сеттеры.

Смежные вопросы