Закон Деметры очень запутанный, потому что похоже, что я никогда не мог написать методы, которые возвращают объекты
Такое ощущение, что я зашел в тупик. Если я правильно понял, тогда, если я следую Закону Деметры, я никогда не смогу создать метод, который возвращает объект, а затем клиентский код делает вызовы к нему. Я просто думаю о фабричном шаблоне, который всегда возвращает объект. Да, есть классы Mapper, которые возвращают объекты. А как насчет коллекций?
1 ответ
Вы неправильно поняли Закон Деметры и применяете его за пределы полезности:
Более формально, закон Деметры для функций требует, чтобы метод M объекта O мог вызывать только методы следующих типов объектов:
- О себе
- Параметры М
- любые объекты, созданные / созданные в M
- Прямые составляющие объекты О
- глобальная переменная, доступная O, в области M
В частности, фабрики используются для создания объекта, а тип создаваемого ими объекта является частью их открытого интерфейса. Таким образом, вызов методов объекта, созданного фабрикой, разрешен выше.