Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Как сказал Брайан, вы можете создать другую модель, которая упорядочивает работу, которую необходимо выполнить.Есть отличный Железнодорожный Репортаж о том, как делать подобные вещи.

HTH

Другие советы

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

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

Контроллеры не обязательно должны быть это легкий.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top