Шаблон MVC описывает роли или слои? - PullRequest
2 голосов
/ 22 сентября 2008

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

Какое слово, по вашему мнению, лучше, слой или роль, описывает три основные части MVC?

Ответы [ 8 ]

4 голосов
/ 22 сентября 2008

Слои должны подразумевать очень узкую связь между соответствующими наборами кода. MVC предполагает относительно тесную связь между моделью, представлением и контроллером. Поэтому, если вы охарактеризуете его как шаблон слоев, он станет проблематичным с точки зрения определения API между уровнями. Чтобы сделать это правильно, вам нужно будет реализовать некоторые неинтуитивные шаблоны.

В связи с этим я бы согласился с вашей тенденцией рассматривать его как шаблон, определяющий роли в одном слое.

2 голосов
/ 22 сентября 2008

Я думаю, что роли - лучшее описание. Представление и контроллер находятся в одном «слое», и обычно модель описывается как слой, но используется между слоями.

Обычно мои приложения сосредоточены вокруг модели предметной области с такими вещами, как презентация, постоянство и файловая структура вокруг нее. Думать об архитектуре как о многоуровневой системе на самом деле не работает для меня.

1 голос
/ 22 сентября 2008

Роли, а не слои. Уровни полностью зависят от базовой реализации шаблона MVC. Например, уровень службы может быть одним уровнем в одной реализации, но он может иметь уровень удаленного взаимодействия веб-службы и уровень базы данных (для двух разных уровней службы) в другой реализации. Концепция слоев заключается просто в том, чтобы помочь вам организовать ее, как и шаблон, но слои не так легко обнаружить, как шаблоны, и слои могут меняться, тогда как шаблон остается неизменным, несмотря на то, что слои меняются из-за разных реализаций. *

1 голос
/ 22 сентября 2008

MVC четко определяет РОЛИ. это 3 роли, которые вы можете реализовать в любом количестве слоев. Например, у вас может быть многослойный контроллер

0 голосов
/ 22 сентября 2008

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

Дело в том, что это просто другой способ нарезки приложения: классическое n-слойное приложение будет:

  • UI
  • Бизнес-логика
  • Настойчивость

В простом приложении MVC могут быть следующие логические слои:

  • UI
  • Контроллер
  • Модель
  • Настойчивость

Но вы все равно могли бы говорить о «пользовательском интерфейсе» и «контроллере» вместе как о формировании уровня пользовательского интерфейса - хотя я обычно разделяю контроллер на отдельный уровень при описании и построении диаграмм этих архитектур.

0 голосов
/ 22 сентября 2008

Я думаю, что можно обоснованно утверждать и то, и другое, но я думаю, что описание частей как «слоев» более соответствует другим соглашениям, таким как модель OSI . Поскольку представление, контроллер и модель постепенно приближаются к вашим данным, это скорее многоуровневая структура. Похоже, что «роли» будут применяться к различным частям приложения на одном и том же уровне.

0 голосов
/ 22 сентября 2008

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

Однако, исходя из этих двух определений, я не вижу необходимости выбирать один «правильный» термин и сжигать другой как неправильный, потому что они мало конфликтуют. Часть слоя играет определенную роль, а набор объектов, соответствующих определенным ролям, образует слой. Конечно, контроллер формирует определенный слой между пользовательским интерфейсом и моделью (по крайней мере, для ввода), однако он также не играет роли - он превращает определенное событие в определенные другие события (и, таким образом, это своего рода адаптер).

0 голосов
/ 22 сентября 2008

Почему не оба? Я вижу это как 3 отдельных слоя, реализующих 3 разные роли.

...