|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.04.2015, 16:37 | #1 |
Регистрация: 19.04.2015
Сообщений: 5
|
Теоретический вопрос о моделях в MVC фреймворках и способе возврата вычисляемых данных
Вопрос у меня не конкретно к какому-то фреймворку, а в целом, так скажем по теории.
Многие фреймворки в документациях приводят пример, когда модель возвращает непосредственно объект какой-либо таблицы, но чаще в проектах модели так же производят какие-то вычисления и могут возвращать помимо полей таблиц еще множество данных. Раньше, скажем в PHP, это решалось просто, к возвращенному массиву просто добавляли новые значения и возвращали весь список, а как решать эту проблему на уровне текущих абстракций фреймворков? В класс (отражающий таблицу) добавлять дополнительные поля? Или же создать отдельный класс, который включает как вычисляемые данные, так и объект с БД? |
19.04.2015, 17:04 | #2 |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
модель это не таблица в общем случае, что вас конкретно интересует?
|
19.04.2015, 17:21 | #3 |
Регистрация: 19.04.2015
Сообщений: 5
|
ну собственно вопрос я написал, в каком виде (ООП) возвращать данные, в ситуации когда нужно вернуть больше чем объект с данными из таблицы БД, в условиях фрейворков (не видел не одного примера подобного рода, всегда возвращают "объекты с БД")
|
19.04.2015, 17:28 | #4 |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
|
19.04.2015, 17:33 | #5 | |
Регистрация: 19.04.2015
Сообщений: 5
|
Цитата:
То есть в процессе работы модели генерируются еще данные, и получается что нужно вернуть как данные из таблицы, так и вычисленные данные, как это сделать правильно в рамках фрейворков. Расширить класс таблицы или же поместить в другую? |
|
19.04.2015, 17:33 | #6 |
Форумчанин
Регистрация: 16.01.2015
Сообщений: 672
|
ооп это объекты, пишите класс возвращаете объект этого класса
так и не понимаю в чем у вас вопрос напишите в запросе так select t1.col1, t2.col2, t1 col1/t2.col2 from t1, t2 where t1.id=t2.id какой "объект бд" тут получаете? это просто набор данных, остальное не важно, также модель может быть вовсе не связанна с бд хотите в логику класса всунуть еще что-то? кто мешает? просто говоря модель подразумевают чисто данные (без бизнес логики), но это не догма, а просто отделение мух от котлет |
19.04.2015, 17:40 | #7 |
Регистрация: 19.04.2015
Сообщений: 5
|
вот пример некого абстрактного фреймворка (на псевдоязыке, надеюсь смысл понятен):
есть класс Post таблицы бд "post_user" обычно пишут так $data = model->getPost(34);// в ответе содержится объект Post с номером поста 34 Но в процессе работы getPost вычисляются еще данные, запихнуть в Post я не могу, так как он отражает таблицу в бд. PS я прекрастно знаю как сделать, вопрос как правильно с точки зрения дизайна. Расширить Post или создать класс выше типа class WiderPost { $post = Post; $data = ... // other data } и уже использовать так $data = model->getPost(34);// в ответе содержится объект WiderPost с Post(34) и другими данными |
19.04.2015, 21:35 | #8 | |||
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Цитата:
Цитата:
Цитата:
Последний раз редактировалось Gorychev; 19.04.2015 в 23:36. |
|||
20.04.2015, 16:34 | #9 |
Регистрация: 19.04.2015
Сообщений: 5
|
Версия вопроса 2.0 (с кодом).
Условие, после обработки из БД формируется результат в виде некого объекта класса Post, в котором описаны поля таблиц (ORM иди ActiveRecord не важно). Вопрос. Как с точки зрения ООП дизайна поступить, то есть что вернуть контроллеру? 1) Просто вернуть массив, где одно значение это объект Post (результат из БД), а второй вычисленные данные. Код:
Код:
3) Заранее расширить класс Post, чтобы он содержал данные не только с таблиц БД, а так же вычисляемые данные. Код:
|
21.04.2015, 18:02 | #10 |
Участник клуба
Регистрация: 08.03.2008
Сообщений: 1,537
|
Я не знаю насчет модных веяний кодинга, но как по мне, первый вариант вполне норм.
Только метод calculateSmth нужно прикинуть, реализовать в этом классе или же в другой модели, в зависимости от того насколько "близки" друг к другу получаемые данные. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
теоретический вопрос с предмета базы данных (есть варианты ответа) | программирование | Помощь студентам | 0 | 20.09.2013 00:46 |
теоретический вопрос по базам данных (есть варианты ответа) | программирование | Помощь студентам | 0 | 20.09.2013 00:30 |
Чисто теоретический вопрос | strannick | Microsoft Office Excel | 5 | 17.11.2012 13:19 |
Вопрос о способе обмена сообщениями | Beyounder | Общие вопросы .NET | 2 | 02.08.2009 00:40 |