34

Пройдясь по университету и следуя за развитием SO, я много слышал об архитектурном шаблоне Model-View-Controller. Я случайно использовал шаблон MVC еще до того, как я понял, что это такое, и все еще использую его в своей повседневной работе. Из того, что я видел, это, вероятно, самый популярный образец, используемый сегодня. То, о чем я мало слышал, - это альтернативные шаблоны, которые вы можете использовать вместо MVC. Какие существуют варианты и по каким причинам вы решили использовать их поверх MVC? Мне также интересно знать типы систем, для которых они типичны для использования. Наконец, каковы плюсы и минусы, которые приходят вместе с ними?Какие альтернативы доступны для контроллера модели?

ответ

27
  1. Passive View - http://martinfowler.com/eaaDev/PassiveScreen.html
  2. Контроль Контроллер - http://martinfowler.com/eaaDev/SupervisingPresenter.html
  3. Model-View-Presenter - http://martinfowler.com/eaaDev/ModelViewPresenter.html

Мой личный фаворит Passive View. Более проверяемый, чем другие, которые я видел, включая MVC.

+1

Существует также Model-View-ViewModel (-Controller), который набирает популярность в пространстве .NET. Вы создаете ViewModel (часто в контроллере), чтобы перейти к представлению, чтобы уменьшить зависимость View от деталей реализации Модели. Это мой любимый. – 2009-09-11 08:01:17

+1

Не пассивно. Посмотрите, что (почти) все веб-фреймворки реализованы? Я не могу думать о каких-либо фреймворках с моей головы, которые построили опрос AJAX для модели, чтобы «уведомлять» о представлении. И в чем разница между пассивным представлением и 3-уровневым? – 2010-05-28 17:11:04

4

Я иногда видел MVC без C, где вид прослушивает изменения в данных модели и соответственно изменяет рендеринг, а также методы, связанные с обработчиками событий для представления.

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

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

4

Ну, есть Model-View-Presenter, но я думаю, вы обнаружите, что наиболее распространенной альтернативой MVC является отсутствие надлежащего разделения. В качестве крайнего примера рассмотрим классические страницы ASP, где HTML, VBScript и SQL находятся рядом друг с другом в одном файле. (Это не бас ASP - вы найдете много таких примеров на других языках.)

4

Хотя приведенные выше ответы верны, я думаю, что гораздо важнее отметить, что слова «шаблон дизайна» полностью неизвестно 90% всех людей, которые создают программное обеспечение. Они просто начинают писать код.

Задача не выбирает оптимальный подход к проектированию, она убеждает других в том, что дизайн имеет ценность.

1

В Lift фреймворком мы используем View First подход. В основном представление состоит из одного или нескольких фрагментов (несколько похожих на контроллеров), а фрагменты могут быть вложенными.Это очень хорошо работает с встроенными возможностями обработки XML и Scala.

5

Некоторые другие архитектурные модели, включая MVC.

Многоуровневые системы

TCP/IP

объектно-ориентированная организация

Model-View-Controller, Презентация-абстракция-контроль, Model View Ведущий и Модель View ViewModel.

Примерами могут быть MVC ASP.NET, Ruby on Rails и множество других.

на основе событий, неявный вызов

Браузер среды (DOM)

трубы и фильтр архитектура

Unix трубы

Хранилище

Таблица Driven Переводчики


Вы также можете найти this paper по Garlan & Шоу на архитектуры программного обеспечения приятный для чтения.

Другим примечательным звеном будет статья об архитектурных узорах по адресу Wikipedia.

0

Как насчет модели Observer. Если я не ошибаюсь, MVC был представлен в Smalltalk, и после этого появились несколько шаблонов публикации/подписки.

Шаблон наблюдателя (подмножество шаблона публикации/подписания) представляет собой шаблон разработки программного обеспечения, в котором объект, называемый субъектом, ведет список своих иждивенцев, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния, обычно путем вызова одного из своих методов. Он в основном используется для реализации распределенных систем обработки событий.

Ex: кнопка «Сохранить» активируется в редакторе, только когда есть данные для сохранения. Другим примером шаблона наблюдателя является архитектура Document View в MFC, где в представлении обновляется при изменении документа.

Смежные вопросы