Закон Деметры очень запутанный, потому что похоже, что я никогда не мог написать методы, которые возвращают объекты

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам