Разница в MVC и MVP interms кода в C # - PullRequest
1 голос
/ 01 мая 2011

когда мы ищем в Google разницу между MVC и MVP, появляется тысяча статей, но я читаю немного, но они не показывают различий в коде. так что если кто-нибудь знает какой-либо URL, откуда я могу увидеть пример кода для реализации MVC и MVP, то, пожалуйста, сообщите мне URL. Я хочу в основном небольшой пример кода, который показал разницу через поток кодирования в C #. Я надеюсь, что я очень хорошо понимаю, что я ищу ..... Мне нужен код тот же код, один с потоком кодирования MVC, а другой с MVP. я не прошу теоретического объяснения.

1 Ответ

1 голос
/ 10 августа 2011

У меня также нет примера кода в моем блоге " MVVM против MVP против MVC: объясненные различия ", но у меня есть раздел для каждой архитектуры, в котором обсуждается, как реализовать их, используя слова.Я опишу это здесь.

MVP требуется несколько деталей реализации

  1. В каждом представлении должен быть реализован интерфейс для представления (например, IUserEditView для редактирования пользователей).Этот интерфейс содержит функции для вещей, которые может понадобиться докладчику (например, showUsers (пользователи IList), displayMessage (String errorMsg)
  2. Презентатор создается для каждого представления. Он содержит функции, необходимые представлениювызов (например, saveNewUser (пользователь-пользователь), selectedUserChanged (пользователь-пользователь))
  3. Экземпляр презентатора создается в кодовой области представления. При возникновении событий представления соответствующие сообщения перенаправляются в экземпляр презентатора.Например, когда нажата кнопка «Сохранить», все данные пользователя передаются докладчику в виде нового пользователя .... myPresenter.saveNewUser (new User (txtUserName.text, txtPassword.text))
  4. Когда экземпляр презентатора создается в (3), представление передается в качестве аргумента конструктору. Таким образом, презентатор может ссылаться на IUserEditView из (1)

То естьоснова MVP. Возможно, вам потребуется реализовать шаблон-посредник, чтобы все презентаторы наследовали от basЭлектронный ведущий.Таким образом, докладчики могут отправлять сообщения друг другу без необходимости явно ссылаться друг на друга, что важно (например, если добавлен новый пользователь, возможно, вам необходимо обновить связанный вид, например, пользователи в сети).

MVCнемного сложнее.

  1. Контроллеры имеют метод выбора вида, который отображается.Это может быть ссылка только на словарь экземпляров всех представлений, но лучший способ состоит в том, чтобы некоторый класс вне контроллера управлял деталями, и тогда контроллер может просто выбрать представление с чем-то вроде ShowView («UsersView», listOfUsers).Обратите внимание, что отдельным классом может быть базовый класс или фабрика, помощник
  2. Метод пересылки действий из представлений в соответствующие контроллеры.С помощью Интернета вы можете просто определить контроллер и метод из URL-адреса запроса (например, http://www.mysite.com/mycontroller/method, www.mysite.com/Users/AddNew/).Для других систем вам придется реализовать класс для управления сообщениями или просто напрямую переслать их экземпляру контроллера в представлении.Я использовал только MVC с Интернетом, поэтому я не уверен насчет последней точки.
  3. Из-за (2) представление теперь может инициировать действия в контроллере.Когда это происходит, контроллер модифицирует модель (реализация этого будет зависеть от деталей вашей модели).
  4. Обновления модели отправляются в представление (обычно через шаблон наблюдателя).Проверьте INotifyPropertyChanged, если используете .net

Слово предостережения: хотя я описал, как реализовать оба метода, их не следует считать взаимозаменяемыми.Есть случаи, когда вы хотите MVC, MVP и MVVM.Я думаю, что если у вас нет технологических ограничений в использовании MVVM, то это ваш лучший выбор.Я предвзят, но я думаю, что, возможно, люди уходят от MVC к MVVM (или MVP), за исключением очень специфических случаев, таких как ASP.NET MVC.Моя статья описывает это более подробно, если вам нужны пояснения.

Краткое резюме о том, когда использовать каждый в терминах C #

  • WinForms -> MVP
  • WPF -> MVVM
  • ASP -> MVC (если вы не можете использовать ASP.NET MVC, то MVP тоже будет работать)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...