Как представить кросс-модельную информацию в MVC? - PullRequest
3 голосов
/ 26 августа 2008

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

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

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

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

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

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

Ответы [ 5 ]

3 голосов
/ 26 августа 2008

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

НТН

1 голос
/ 26 августа 2008

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

1 голос
/ 26 августа 2008

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

0 голосов
/ 26 августа 2008

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

0 голосов
/ 26 августа 2008

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

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

...