Сведения о вопросе

rjevskii

02:31, 17th August, 2020

Как представить информацию о кросс-модели в MVC?

Просмотров: 420   Ответов: 5

У меня есть приложение, построенное с использованием MVC, которое создает представление, которое предоставляет сводную информацию по нескольким моделям. Кроме того, некоторые вычисления выполняются по различным наборам данных.

Нет четкой единой модели (которая, по крайней мере, сопоставляется с таблицей), которая, по-видимому, имеет смысл в качестве отправной точки для этого, поэтому различные сводки извлекаются из способствующих моделей в контроллере, передаются в представление и вычисления выполняются там.

Но это кажется, ну, грязным . Но контроллеры должны быть легкими, не так ли? И бизнес-логика не должна быть в представлениях,так как у меня она присутствует.

Так где же должна быть собрана эта информация? Новая модель, которая не сопоставляется с таблицей? Библиотека function/module? или что-то еще?

(Хотя я рассматриваю это как в основном архитектурный / шаблонный вопрос, я работаю в Rails, FWIW.)

Edit: хорошие ответы на все вопросы и много консенсуса, что обнадеживает. Я "accepted" ответ, который я сделал, чтобы сохранить ссылку на Railscasts в верхней части. Я отстаю в своем просмотре Railscast-что-то, что я буду делать напряженные попытки исправить!



  Сведения об ответе

LAST

22:27, 26th August, 2020

Как сказал Брайан, вы можете создать другую модель, которая маршалирует работу, которую нужно сделать. Существует большой Railscast о том, как сделать этот тип вещи.

HTH


  Сведения об ответе

piter

00:29, 25th August, 2020

Контроллеры не должны сопоставляться с определенными моделями или представлениями. Ваша модель не должна сопоставлять one-to-one с таблицей базы данных. Это своего рода идея структуры. Разделение проблем, которые могут быть проверены в изоляции.


  Сведения об ответе

dump

16:56, 25th August, 2020

Почему бы не создать модель, которая не наследует ActiveRecord::Base и не выполняет логику там (подумайте о классе Cart в Agile...With Rails).


  Сведения об ответе

FAriza

06:02, 22nd August, 2020

Вы не хотите, чтобы логика была в представлении. Однако вы можете создать представление базы данных. Кроме того, вместо того, чтобы создавать его на стороне базы данных, создайте его как новую модель. Это позволит вам выполнять ваши вычисления и вашу фактическую логику там, в одном месте. Боль от попыток сохранить ваши взгляды в синхронизации против одного времени "pain" создания новой модели... Я голосую за новую модель.


  Сведения об ответе

+-*/

15:33, 11th August, 2020

Контроллеры не должны быть такими легкими.

Однако, если у вас есть некоторые вычисления, которые полагаются только на модель/ы, вам, вероятно, просто нужна какая-то оболочка модели для моделей, чтобы выполнить расчет. Затем вы можете поместить это в API для представления, чтобы представление получило конечный результат.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться