Как совместить фабрику и закон Деметры?

Доброго вечера.
Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод. Получается, использовать фабрики - это вынужденное зло, и код с фабриками априори хуже кода, который следует закону Деметры? Ведь даже если я просто верну объект из функции, не вызывая его, данный закон будет нарушать уже другой класс.

Если это вопрос удобства, то что в большинстве случаев объективно лучше игнорировать? Являются ли фабрики почти антипаттерном, которых нужно избегать до последнего? И есть ли решение, позволяющее усидеть на двух стульях?

Заранее спасибо.
  • Вопрос задан
  • 2084 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод.

Фабрика возвращает интерфейс объекта, который был специально введён, чтобы предоставить обобщённый доступ к разным типам объектов создаваемых фабрикой. Пользователи фабрики взаимодействуют только с этими интерфейсами, не с самими объектами. Т.о. пользователи фабрики не зависят от модулей реализующих конкретные объекты. Закон Деметры как раз и нужен для того, чтобы уменьшить зацепление между модулями. Следуйте духу закона, а не букве.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы