Точка, через которую проходит работа между элементами системы, на мой взгляд, необходима. Это убирает чрезмерное внутреннее связывание между этими элементами. Но конкретно тот пример Registry вызывает у меня отторжение - автор зачем-то мешает разные техники (у него по одному геттеру и сеттеру - нет четкого понимания, с каким объектом, полученным из этого регистри, вы работаете, там же притянуты за уши доступ к объекту, как к массиву - мне не очень понятно, зачем и тд) ... складывается ощущение, что он на собеседовании пытается доказать, что знает кучу умных вещей, но мало понимает, зачем они.
(Добавление)
Я предпочитаю связывать приложение через фабричные методы. Это дает ряд бонусов:
1. У меня всегда перед глазами список того, что я могу получить (список методов)
2. Я всегда знаю, что получу от того или иного метода (четкость API - это очень важно)
3. Я всегда имею возможность централизованно повлиять на систему (поменяв всего в одном месте возвращаемый объект - я получаю новое поведение всей системы)
4. У меня стабильно работает автокомплит в IDE - скорость моей работы повышается в разы
Сами смотрите, что для вас более наглядно : registry->get('userCart'); //хз, есть ли этот карт или мы получим нулл, а должен ли он там быть вообще, может там надо не userCart спрашивать, а cart?
или
factory->getCart(); // уже введя 'getC' IDE вам автокомплитит, что вы можете получить, а так же сообщает, что в ответ вы гарантированно получите объект UserCart, при этом внутри метода getCart вы можете сразу прописать наполнение этого объекта, а при необходимости - логику выбора, какую корзину именно отдавать (если у вас несколько реализаций)
|