Давайте обсудим структуру агрераторов (или мепперов, если я не путаю), суть такая - нужен инструмент, который будет хранить в себе нужные обекты, т.е., создавать их из субд (у меня это аггреатор):
http://svn.local.prime-gr.ru/svn/baikalia.web.local/modules/pages/classes/pages/aggregator.php
Сейчас возникает проблема. Из модели (например - выбрасть все страны) или например самого объекта нужно получать объекты (например для проверки существования страницы с таким же урл). Так вот, если делать что-то вроде
$agregator->append(array('id' => $this->getId(), 'urlPart' => $this->getUrlPart()), array('sort' => 'position', 'sortType' => 'desс'));
Получится, что по сути обект знает о хранении и занимается не своим делом, тогда правильнее делать так (как сейчас реализовано):
$aggregator->appendByURLPart($this->getUrl());
Первый вариант:
+ Быстрая модификация;
+ Изменение кода не влияет на другие участки кода;
- Объект зависим от структуры БД
- Модель и т.п. знают о том, о чем ему знать не положено.
- Не возможность делать сложных запрос (джойны, вложенные запросы)
Второй вариант:
+ По сути так же быстрая модификация кода;
- Изменение может повлиять на другие участки логики (как выход на каждый элемент кода создавать свой метод в агрегаторе или жесткое разграничение, короче тут я пока логично все не выстроил и слегка запутался,
но могут возникнуть случаи когда еще кто-то из разработчиков решил использовать "подходящий" ему метод, но созданный для других целей)
+ Рождение объектов независимы
+ Модель и т.п. ничего не знаю о том, как там все работает
+ Ни каких ограничений по сложности запросов
- Внесение изменений влечет в свою очередь не только изменение самого агреатора, но и других участков кода, например модели или виджета (где еще использовался этот метод), и соответственно приходится искать, где еще используется этот метод и вносить изменения.
Кто как решает подобные задачи?. Нужна правильная архитектура