Закон Деметры очень запутанный, потому что похоже, что я никогда не мог написать методы, которые возвращают объекты - PullRequest
9 голосов
/ 19 февраля 2011

Такое ощущение, что я зашел в тупик.Если я понял это правильно, тогда, если я следую Закону Деметры , я никогда не смогу создать метод, который возвращает объект, а затем клиентский код вызывает его.Я просто думаю о фабричном шаблоне, который всегда возвращает объект.Да, есть классы Mapper, которые возвращают объекты.А как насчет коллекций?

1 Ответ

13 голосов
/ 19 февраля 2011

Вы неправильно поняли закон Деметры и применяете его за пределами полезности:

Более формально, закон Деметры для функций требует, чтобы метод Mобъекта O может вызывать методы только следующих типов объектов:

  • самого O
  • параметров M
  • любых объектов, созданных / созданных в рамках M
  • Объекты прямого компонента O
  • глобальная переменная, доступная для O, в области M

В частности, фабрики используются для создания объекта, итип создаваемого ими объекта является частью их открытого интерфейса.Таким образом, вызов методов для объекта, созданного фабрикой, разрешён выше.

...