MVC підручник/покрокове керівництво, яке призначене для людей, знайомих MVVM?

Я звик працювати в wpf з шаблоном дизайну MVVM, але я нещодавно попросили зробити щось у ASP.Net. Я хотів би спробувати використовувати MVC, тому що я бачив, що він багато посилався на навчання MVVM, але я нічого не знаю про це.

Я можу знайти багато сайтів, які призначені для пояснення MVVM для тих, хто знайомий з MVC, однак я не можу знайти хороший, який пояснює MVC до того, хто використовується для MVVM. Є сайти, які пояснюють MVC на власному, але мені важко зрозуміти їх, тому що мій розум продовжує намагатися застосувати MVVM логіку.

Отже, чи є якісь хороші сайти, які можуть пояснити MVC в термінах, які хтось звик до MVVM може зрозуміти? Або хтось може мені це пояснити тут?

2
@ SteveGreatrex Я вважав, що, однак, я читав десь, що MVVM в основному призначений для розробки WPF/Silverlight через спосіб роботи системи зв'язування, і не оптимізований для використання з ASP.Net
додано Автор Rachel, джерело
Згідно з нашим керівництвом за темою , Деякі питання все ще не залежать від теми, навіть якщо вони вписуються в одне з перелічених вище категорій: ... Запитання, які запитують нас рекомендувати або знайти книгу, інструмент, бібліотеку програмного забезпечення, навчальний посібник або інший ресурс за межами сайту
додано Автор Robert Columbia, джерело
Чому б не пропустити пояснення і просто перейти до використання MVVM у веб-розробці:
додано Автор Steve Greatrex, джерело

2 Відповіді

Коли ви прийшли з MVVM візерунок і почати з MVC шаблону (особливо ASP.NET MVC) я хотів би запропонувати думати про "MVC" шаблон краще, як "VMVC", тому що "M" в MVC не Модель мається на увазі під "М" в МВВМ. Фактично вона відповідає Моделі перегляду . Я не знаю, чи є це загальним визначенням MVC, але це правда і найбільш часто використовуваних і найкращих практик, коли ви працюєте з ASP.NET MVC (хоча ви бачите кожен час і потім приклади або питання тут, на SO, де доменні об'єкти є використовується у вигляді (що іноді є саме причиною проблеми, описаної в питанні)).

Перше, що я зазвичай роблю, коли створюю проект ASP.NET MVC з одного з шаблонів Visual Studio, це перейменувати створену папку "Model" у "ViewModel". Якщо ви подивитеся, що робить код шаблону з тими "Моделями", ви бачите, що вони безпосередньо використовуються для переглядів, що мають анотації даних для перевірки вхідних даних, для форматів відображення і, можливо, іменування поля в перегляді. Ці анотації частково використовуються безпосередньо помічниками HTML для створення HTML і не представляють домен або бізнес-логіку. Іншими словами: вони представляють ViewModels для перегляду 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
}

Яку частину МВВМ несе ця відповідальність? Я не впевнений. Я бачив конструкції, де ViewModel містить деяку посилання на сховище, витягує модель (модель домену) для заповнення власних властивостей і записує назад до сховища через обробники ICommand. Це означатиме, що ViewModels в MVVM також несуть відповідальність за "контролер", тоді як ViewModels в MVC набагато простіше.

Як заключна примітка: Особисто я знайшов MVVM візерунок з wpf набагато складніше освоїти, ніж шаблон MVC. ASP.NET MVC розроблений з нуля для підтримки MVC-моделювання, і немає необхідності (або навіть не можливості) залишити цей шлях. Це не стосується WPF. Оригінальний дизайн був побудований з урахуванням переглядів і коду за файлами, а не з шаблоном MVVM. Я часто знаходив ситуації, коли було дуже важко прив'язувати елементи перегляду або атрибути до ViewModel, а обробка цього у файлах кодування була набагато простішою, трохи порушуючи принципи MVVM.

Я думаю, що у вас не виникне жодних проблем в MVC, коли ви маєте досвід роботи з шаблоном MVVM.

5
додано
Гарне пояснення, особливо вказуючи на відмінності між MVC Models і MVVM Models. Мені було потрібно трохи зрозуміти це, тому що я очікував, що два М будуть однаковими. Я почав вивчати MVC, і тепер я розумію, що M + code> містить сукупність частин Mcode M, MVVM і VM .
додано Автор Rachel, джерело
Як я розумію, MVC M містить властивості, які ви звичайно знаходите в Mcode VM VM, але з усіма видаленими функціональними можливостями (тому він діє як код> M ). C - це функціональність, яку ви знайдете в Mcode MVVM VM , наприклад, доступ до даних, розширену перевірку ділових правил і т.д.
додано Автор Rachel, джерело
@Rachel: Ах, добре, що ви підтверджуєте, що VM = M + C . Я не була в цьому впевнена. Для другої частини: я б, мабуть, повністю виключив M MVVM (модель домену) повністю з ViewModel в MVC. Наприклад, StaffViewModel у цій публікації ( stackoverflow.com/q/8010566/270591 , це виглядає дуже MVVM-як?) є антипаттерн, тому що 1) немає PropertyChanged подія на веб-сторінці, яка допоможе оновити модель і 2) з міркувань безпеки: Викриття більше властивостей моделі сполучного, ніж користувач повинен Редагування на сторінці є потенційним ризиком (маніпулювання запитами на публікацію HTTP).
додано Автор Slauma, джерело

Рейчел, я не зіткнувся з жодними сайтами ASP.NET MVC, які орієнтовані на натовп MVVM, але з досвіду роботи з перших рук я подумав: music-store-part-1 "Музичний магазин ASP.NET MVC був абсолютно фантастичним.

I am originally a WebForms developer, and I can absolutely attest to having a certain technology in the back of your mind while learning another, forcing your logic to shift a certain way. That was especially difficult going from Webforms -> MVC. The best advice I have is to just analyze every aspect of that Music Store tutorial as a separate entity.

Удачі, і я сподіваюся, що це допоможе.

2
додано
Я фактично завантажив код для цього раніше і отримав помилки при спробі побудувати його. Я не сильний веб-розробник, тому я не витрачав багато часу на те, щоб виправити це, але я можу поглянути на нього ще раз.
додано Автор Rachel, джерело
+1 для великого підручника MVC. Я згоден, що ви дізнаєтеся більше про написання коду, ніж просто читати його, але мені також подобається переглядати готовий продукт, щоб побачити, на що я працюю. Код у вашому посиланні виконується без помилок, тому я повинен був завантажити попередню версію коду раніше.
додано Автор Rachel, джерело
@Rachel Насправді мені було простіше просто написати код, коли ви просуваєтеся під керівництвом. Я думаю, це допомагає дізнатися більше, коли ви пишете код, як oppsed просто читати деякі вихідні коди вже написані. Дайте мені знати помилки, які ви отримали, можливо, я можу допомогти.
додано Автор user596075, джерело
var chat = new Chat();
var chat = new Chat();
642 учасників

Обсуждение вопросов по C# / .NET / .NET Core / .NET Standard / Azure Сообщества-организаторы: — @itkpi — @dncuug