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

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

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

Заранее спасибо.
  • Вопрос задан
  • 2040 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Заюзал в очередной раз абстрактную фабрику, и неожиданно вспомнил, что метод класса не должен обращаться к объектам, которые вернул какой-либо метод.

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

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

Войти через TM ID
Похожие вопросы