MVC учебник / пошаговое руководство, предназначенное для людей, знакомых MVVM? - PullRequest
2 голосов
/ 28 октября 2011

Я привык работать в WPF с шаблоном проектирования MVVM, но недавно меня попросили сделать что-то в ASP.Net.Я хотел бы попробовать использовать MVC, потому что я видел, что на него часто ссылаются при изучении MVVM, однако я ничего об этом не знаю.

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

Итак, есть ли хорошие сайты, которые могут объяснить MVC в терминахкто-то привык к MVVM может понять?Или кто-то может объяснить мне это здесь?

Ответы [ 2 ]

5 голосов
/ 04 ноября 2011

Когда вы исходите из паттерна MVVM и начинаете с паттерна MVC (особенно ASP.NET MVC), я бы посоветовал думать о паттерне "MVC" лучше, чем о "VMVC", потому что "M" в MVC - это не Модель означает «М» в MVVM. Это на самом деле соответствует ViewModel . Я не знаю, соответствует ли это общему определению MVC, но оно верно и является наиболее используемой и наилучшей практикой, когда вы работаете с ASP.NET MVC (хотя вы время от времени видите здесь примеры или вопросы по SO, где доменные сущности являются используется в представлении (что иногда и является причиной проблемы, описанной в вопросе)).

Первое, что я обычно делаю, когда создаю проект ASP.NET MVC из одного из шаблонов Visual Studio, - переименовываю созданную папку «Модель» в «ViewModel». Если вы посмотрите, что код шаблона делает с этими «моделями», вы увидите, что они непосредственно используются для представлений, что у них есть аннотации данных для проверки ввода, форматов отображения и, возможно, именования полей в представлении. Эти аннотации частично используются непосредственно помощниками HTML для создания HTML и не представляют домен или бизнес-логику. Другими словами: они являются ViewModel для представления Razor / HTML в том же смысле, в каком вы используете ViewModels в MVVM для представлений XAML в WPF / Silverlight / Phone7.

Домен «Модель» фактически не является частью шаблона MVC, поскольку он является частью шаблона MVVM. Таким образом, сокращения несколько вводят в заблуждение, когда вы сравниваете MVVM с MVC. В качестве очень упрощенной «таблицы перевода» можно сказать:

MVVM                         MVC
----                         ---
M  -> Domain Model           not part of the pattern
V  -> View (XAML)            V -> View (HTML, Razor)
VM -> ViewModel              M -> ViewModel
not part of the pattern      C -> Controller

Я не уверен насчет соответствующего контроллера в MVVM. В MVC контроллером обычно является модуль, который переводит доменные объекты в ViewModels, а затем в представления (и наоборот) - схематично:

ControllerActionForGetRequest ( params )
{
     objects = GetDomainObject(params)    - entities, queryables or DTOs
     viewModel = CreateViewModelFromDomainObjects(objects)
     view = CreateViewFromViewModel(viewModel)
}

ControllerActionForPostRequest ( viewModel )
    // ModelBinder makes "viewModel" from HTML input fields, etc
{
     if (IsValid(viewModel))
     {
         data = CreateDomainObjectsOrDtosFromViewModel(viewModel)
         WriteData(data)  - back to data store
         RedirectToActionForGetRequest
     }
     else
         GoBackToView
}

Какая часть в MVVM несет эту ответственность? Я не уверен. Я видел проекты, в которых ViewModel содержит некоторую ссылку на репозиторий, вытаскивает модель (модель домена), чтобы заполнить свои собственные свойства, и записывает обратно в репозиторий через обработчики ICommand. Это означало бы, что ViewModels в MVVM также должны быть «контроллерами», тогда как ViewModels в MVC намного проще: они являются более или менее единственными пакетами свойств с метаданными для предоставления и форматирования данных для представления.

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

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

2 голосов
/ 28 октября 2011

Рэйчел, я не сталкивался с сайтами ASP.NET MVC, которые ориентированы на толпу MVVM, но из первых рук я подумал, что ASP.NET MVC Music Store был абсолютно фантастическим.

Я изначально разработчик WebForms, и я могу абсолютно засвидетельствовать наличие одной технологии в глубине души, изучая другую, заставляя вашу логику меняться определенным образом. Это было особенно сложно, переходя от Webforms -> MVC. Лучший совет, который у меня есть, - просто проанализировать каждый аспект этого учебника Music Store как отдельную сущность.

Удачи, и я надеюсь, что это поможет.

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