Обе эти структуры направлены на разделение проблем - например, взаимодействие с источником данных (моделью), логикой приложения (или превращением этих данных в полезную информацию) (контроллер / презентатор) и отображаемым кодом (вид). В некоторых случаях модель также может использоваться для превращения источника данных в абстракцию более высокого уровня. Хорошим примером этого является проект MVC Storefront .
Здесь обсуждается здесь относительно различий между MVC и MVP.
Сделанное различие заключается в том, что в приложении MVC традиционно есть представление, и контроллер взаимодействует с моделью, но не друг с другом.
Конструкции MVP имеют Presenter для доступа к модели и взаимодействия с представлением.
Сказав, что ASP.NET MVC по этим определениям представляет собой структуру MVP, потому что Controller обращается к Модели, чтобы заполнить представление, которое не имеет логики (просто отображает переменные, предоставляемые контроллером).
Чтобы, возможно, получить представление об отличии ASP.NET MVC от MVP, посмотрите эту презентацию MIX Скотта Гензельмана.
Разве Вы не можете добавить использование условий объединения ActiveRecord?
, Например, у меня есть довольно сложный запрос с помощью нескольких зависимых записей, и он хорошо работает путем объединения условий, и включайте директивы
Contractors.find(
:all,
:include => {:council_areas => :suburbs},
:conditions => ["suburbs.postcode = ?", customer.postcode]
)
Предположение что:
Это соединение возвращает Подрядчиков в пригороде, определенном [1 111] customer.postcode.
сгенерированный запрос похож:
SELECT contractors.*, council_areas.*, suburbs.*
FROM `contractors`
LEFT OUTER JOIN `contractors_council_areas` ON `contractors_council_areas`.contractor_id = `contractors`.id
LEFT OUTER JOIN `council_areas` ON `council_areas`.id = `contractors_council_areas`.council_area_id
LEFT OUTER JOIN `council_areas_suburbs` ON `council_areas_suburbs`.council_area_id = `council_areas`.id
LEFT OUTER JOIN `suburbs` ON `suburbs`.id = `council_areas_suburbs`.suburb_id WHERE (suburbs.postcode = '5000')
(Примечание: Я отредактировал список столбцов для краткости).
Можно ли разработать немного больше на точно, что Вы пытаетесь выполнить с этим запросом?
Также смотрят на в: опция соединений для находки. Это позволяет Вам определять, как Вы хотите таблицы, к которым присоединяются. текст ссылки
И остерегаются при использовании: включайте, поведение изменяется немного в направляющих 2.1 и может вызвать некоторые проблемы, когда используется в сочетании с a: опция условий, которая ссылается на включенную таблицу. текст ссылки и текст ссылки является двумя статьями от Основных, которые упоминают этот глюк.
Вы можете использовать что-то вроде следующего, чтобы получить соответствующую синтаксическую магию левого внешнего соединения.
Person.reflect_on_association(:companies).options[:conditions] = 'people.magical_flag IS NULL'