Почему был написан данный рецепт: у многих возникает вопрос: "как правильно работать с дао?", и чаще всего я вижу примеры такие:
в классе модели описываются все методы, на подобии getLastNews, возвращающие простые типы и не дающие никакой гибкости по сравнению с ООП подходом, в том числе не возможна стандартная валидация полей и многое другое.
Я предложил более гибкий подход: выделение фабрик, создание коллекций, отделение сущностей и тд
Многое что можно было бы сделать в рецепте не приведено, например:
автоматическое присвоение свойствам значений(то что вы описали), хотя я в одном из постов дал пример как можно это реализовать:
Код: Выделить всё
public function setAttributes($model, $attributes)
{
foreach($attributes as $name => $value)
{
if(property_exists($model, $name))
$model->$name = $value;
}
}
Можно(да и нужно) создать базовый класс для коллекций, куда вынести методы getTotal,setTotal и др.
Можно ещё много чего, но я ещё раз повторяю: дано направление в правильном(более менее) проектирование работы со слоем данных, а не готовое решение!
Вся гибкость этого похода. в том что мы сами строим SQL(да не только sql, данные можно брать откуда угодно), так же как если бы просто мы писали запросы и возвращали простые типы, но при этом у нас более гибкий метод работы с объектами, при этом кол-ва кода увеличивается не намного.Слишком много низкоуровневого и ручного кода:
- ручной SQL
Если не хотите работать "руками" ,есть ORM решения!!!
уже придумали - AR.Давайте подумаем, как использовать DAO, но без такого жесткого хардкодинга.
Давайте, только давайте не будем изобретать велосипед(ORM), и будем использовать "ручной sql"!!!