[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Теоретический вопрос о моделях в MVC фреймворках
LukiDuki1980
Вопрос у меня не конкретно к какому-то фреймворку, а в целом, так скажем по теории.

Многие фреймворки в документациях приводят пример, когда модель возвращает непосредственно объект какой-либо таблицы, но чаще в проектах модели так же производят какие-то вычисления и могут возвращать помимо полей таблиц еще множество данных.

Раньше, скажем в PHP, это решалось просто, к возвращенному массиву просто добавляли новые значения и возвращали весь список, а как решать эту проблему на уровне текущих абстракций фреймворков? В класс (отражающий таблицу) добавлять дополнительные поля? Или же создать отдельный класс, который включает как вычисляемые данные, так и объект с БД?
Игорь_Vasinsky
почитайте про MVC

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
LukiDuki1980
Цитата (Игорь_Vasinsky @ 19.04.2015 - 18:13)
почитайте про MVC

это хороший ответ, но только на вопрос - "какие паттерны программирования порекомендуете почитать" smile.gif
chee

$rows = $db->all();
$tabledecorator->setRows($rows);
$tabledecorator->setStrategy('simpledecoration');
$rows = $tabledecorator->getHandledRows();

Допустим сделать объект который будет декорировать массив

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
LukiDuki1980
Цитата (chee @ 19.04.2015 - 18:31)

$rows = $db->all();
$tabledecorator->setRows($rows);
$tabledecorator->setStrategy('simpledecoration');
$rows = $tabledecorator->getHandledRows();

Допустим сделать объект который будет декорировать массив

Я так понимаю это какой-то паттерн, но не паттерн декоратор?
Можно расписать, что происходит в образце?)
chee
Цитата (LukiDuki1980 @ 19.04.2015 - 18:47)
Можно расписать, что происходит в образце?)

нет

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
stump
Опыт подскажет тебе ответ на твой вопрос.

_____________
Трус не играет в хокей
LukiDuki1980
Версия вопроса 2.0 (с кодом).
Условие, после обработки из БД формируется результат в виде некого объекта класса Post, в котором описаны поля таблиц (ORM иди ActiveRecord не важно).
Вопрос.
Как с точки зрения ООП дизайна поступить, то есть что вернуть контроллеру?


1) Просто вернуть массив, где одно значение это объект Post (результат из БД), а второй вычисленные данные.
class Model {

public function getData(){
$query = "Query";
$post = $store->get($query);
$result = [
'post' => $post,
'smthParams' => $this->calculateSmth()
];

return $result;
}
...
}


2) Создать какой-то выше по уровню класс типа OverPost, которые бы включал в себя объект (результат из БД), и вычисленные данные (по сути тот же массив только в обертке ООП со всеми плюшками).
class Model {

public function getData(){
$query = "Query";
$post = $store->get($query);
$result = new OverPost()
$result->setPostData($post);
$result->setSmthParam($this->calculateSmth())

return $result;
}
...
}



3) Заранее расширить класс Post, чтобы он содержал данные не только с таблиц БД, а так же вычисляемые данные.

class Model {

public function getData(){
$query = "Query";
$post = $store->get($query);
$post->setSmthParam($this->calculateSmth());
return $post;
}
...
}


В общем какой вариант будет правильней, с точки зрения дизайна кода, с точки зрения MVC и с точки зрения нынешнего стиля фреймворков?
M-A-X
С этими паттернами и фреймворками одни проблемы.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.