Внедрение зависимостей и пакеты Java - PullRequest
1 голос
/ 18 марта 2011

Я делаю проект, который имеет несколько пакетов.Все мои классы реализованы в соответствии с идеями Dependency Injection.

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

Теперь проблема заключается в том, что, по крайней мере, насколько я понимаю, корень композиции должен знать все классы, которыебудет использоваться системы.То есть все классы должны быть помечены как общедоступные.

Я мог бы определить для каждого пакета Корень компоновки пакета, а затем вызвать каждый из них из корня композиции системы, но это не так уж хорошоидеи.

Например, в C # ситуация не столь серьезна, поскольку отсутствует модификатор доступа, защищенный пакетами, а есть внутренний (доступный для всех элементов текущей сборки).

Как вы, ребята, вообще справляетесь с этим?

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Мне кажется, что в C # такая же ситуация.Если фабрика бинов находится за пределами пакета, и разработчик делает класс внутренним, разве это не запрещает доступ к фабрике бинов?

Я делаю классы общедоступными и не очень беспокоюсь об этом.

Интерфейсы, которые должны использовать клиенты, являются общедоступными по определению.Поскольку они не создают экземпляры и не используют реализации напрямую, практически нет опасения предоставить им публичный доступ.

Альтернативой может быть создание метода фабрики и предоставление его фабрике бинов.Позвольте ему выбрать, какую реализацию обеспечить для данной реализации, используя общедоступную фабрику.

4 голосов
/ 18 марта 2011

Большинство контейнеров обходят ограничения доступа с помощью отражения.Однако это всего лишь взлом, чтобы заставить вас почувствовать, что у вас есть некоторая защита, когда на самом деле перефразировка позволяет игнорировать модификаторы доступа.

ИМХО, если вы обращаетесь к классу в другом пакете, вы должны прояснить это идать ему соответствующий модификатор доступа.

3 голосов
/ 18 марта 2011

Теперь проблема заключается в том, что, по крайней мере, насколько я понимаю, корень композиции должен знать все классы, которые будут использоваться в системе.То есть все классы должны быть помечены как общедоступные.
...
Как вы, ребята, вообще справляетесь с этим?

Отметив все классы как public,На самом деле это не рассматривается как проблема в мире Java.

...