#c# #model-view-controller #mvp
#c# #model-view-controller #mvp
Вопрос:
когда мы ищем в Google разницу между MVC и MVP, то доступны тысячи статей, но я прочитал несколько, но они не показывают разницы с точки зрения образца кодирования. итак, если кто-нибудь знает какой-либо URL, по которому я могу увидеть пример кода как для реализации MVC, так и для MVP, то, пожалуйста, сообщите мне URL. мне нужен в основном небольшой пример кода, с помощью которого была бы показана разница в потоке кодирования на c #. я надеюсь, мне очень ясно, что я ищу ….. мне нужен один и тот же код, один с потоком кодирования mvc, а другой с MVP. я не прошу теоретического объяснения.
Комментарии:
1. просто загрузите примеры проектов. первый предназначен для mvc, а второй — для mvp, тогда вы можете легко понять разницу в архитектуре mvp и mvc. Это очень просто и достаточно, чтобы понять основное различие между ними обоими.
Ответ №1:
У меня также нет примера кода в моем сообщении в блоге «MVVM vs MVP vs MVC: Объясненные различия» но у меня есть раздел для каждой архитектуры, в котором обсуждается, как их реализовать с помощью слов. Я опишу это здесь.
MVP требует нескольких деталей реализации
- Каждое представление должно реализовывать интерфейс для представления (например, IUserEditView для редактирования пользователями). Этот интерфейс содержит функции для того, что может потребоваться докладчику (например, showUsers (пользователи из списка IList), DisplayMessage (ошибка строки SG))
- Для каждого представления создается презентатор. Он содержит функции, которые нужно будет вызвать представлению (например, saveNewUser (Пользователь user), selectedUserChanged (Пользователь user))
- Экземпляр презентатора создается в коде представления. Когда происходят события просмотра, соответствующие сообщения пересылаются экземпляру презентатора. например, при нажатии кнопки сохранить все данные пользователя пересылаются ведущему в виде нового пользователя ….myPresenter.saveNewUser(новый пользователь(txtUserName.text, txtPassword.text))
- Когда экземпляр презентатора создается в (3), представление передается в качестве аргумента конструктору. Таким образом, докладчик может ссылаться на IUserEditView из (1)
В этом суть MVP. Вероятно, вам потребуется реализовать шаблон посредника и сделать так, чтобы все ведущие были унаследованы от базового докладчика. Таким образом, ведущие могут отправлять сообщения друг другу без необходимости явно ссылаться друг на друга, что важно (например, если добавлен новый пользователь, возможно, вам нужно обновить связанное представление, например, «Пользователи онлайн»).
MVC немного сложнее.
- У контроллеров есть способ выбора того, какой вид будет отображаться. Это могло бы ссылаться только на словарь экземпляров всех представлений, но лучший способ — использовать какой-либо класс вне контроллера для управления деталями, а затем контроллер может просто выбрать представление с помощью чего-то вроде ShowView («UsersView», listOfUsers). Обратите внимание, что отдельный класс может быть базовым классом или вспомогательным заводом
- Метод пересылки действий из представлений на соответствующие контроллеры. В Интернете вы просто можете определить контроллер и метод по URL-адресу запроса (например,http://www.mysite.com/mycontroller/method , www.mysite.com/Users/AddNew /). Для других систем вам придется реализовать класс для управления сообщениями или просто напрямую пересылать их экземпляру контроллера в представлении. Я использовал MVC только с Web, поэтому я не уверен в последнем пункте.
- Благодаря (2) представление теперь способно запускать действия в контроллере. Когда это происходит, контроллер изменяет модель (реализация этого будет зависеть от деталей вашей модели).
- Обновления модели отправляются в представление (обычно через шаблон наблюдателя). Проверьте INotifyPropertyChanged, если используете .net
Предостережение: хотя я описал, как реализовать оба метода, на самом деле их не следует считать взаимозаменяемыми. Бывают случаи, когда вам нужны MVC, MVP и MVVM. Я думаю, что если у вас нет технологических ограничений при использовании MVVM, то это ваш лучший выбор. Я предвзят, но я думаю, что, возможно, люди отходят от MVC в сторону MVVM (или MVP), за исключением очень специфических случаев, таких как ASP.NET MVC. Моя статья описывает это более подробно, если вам нужны разъяснения.
Краткое описание того, когда использовать каждый из них в терминах C#
- WinForms -> MVP
- WPF -> MVVM
- ASP -> MVC (если вы не можете использовать ASP.NET MVC, тогда MVP тоже будет работать)