Теоретический вопрос о моделях в mvc фреймворках и способе возврата вычисляемых данных

19.04.2015
2
0
#1
Вопрос у меня не конкретно к какому-то фреймворку, а в целом, так скажем по теории.
Многие фреймворки в документациях приводят пример, когда модель возвращает непосредственно объект какой-либо таблицы, но чаще в проектах модели так же производят какие-то вычисления и могут возвращать помимо полей таблиц еще множество данных.
Раньше, скажем в PHP, это решалось просто, к возвращенному массиву просто добавляли новые значения и возвращали весь список, а как решать эту проблему на уровне текущих абстракций фреймворков? В класс (отражающий таблицу) добавлять дополнительные поля? Или же создать отдельный класс, который включает как вычисляемые данные, так и объект с БД?
 
19.04.2015
2
0
#2
Версия вопроса 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 и с точки зрения нынешнего стиля фреймворков?
 

-master-

Well-known member
14.01.2012
616
12
#3
вообщето модель не очень то должна работать с базой, это дело другого уродня