MVVM чи MVC? Хочете використовувати однаковий набір класів для WPF і ASP.NET


11

Я новачок з точки зору дизайну. Я щойно почав вивчати MVC, коли чую нове гудіння, MVVM.

Я хочу дізнатися про інше та інше, переробивши старий інвентар та додаток-фактуру, розроблений для клієнта. Я хочу написати як програму WPF на базі Windows, так і веб-версію. Я хочу використовувати той самий набір класів, якщо це можливо, якщо ні, то, принаймні, з незначною модифікацією.

Я прочитав пару статей, але я не дотримуюся архітектури та концепцій високого рівня .NET 3.5 & 4, обговорюваних там. Я хочу рухатися поетапно, розробляючи лише те, що мені дійсно потрібно в моєму реальному проекті.

Чи є легка покрокова посилання на MVVM? MVVM - це супернабір чи підмножина MVC? Який шаблон сучасний і який слід вибрати для Windows & Web версій своєї програми?

Є певні класи, які мені рідко потрібно зв'язати з видом. У цьому випадку проектування одного класу способом MVVM виявиться додатковою робочою силою.

Відповіді:


11

Чи є легка покрокова посилання на MVVM?

Так, є. Погляньте тут.

MVVM - це супернабір чи підмножина MVC?

MVVM належить до родини MVC, тому, якщо ви можете сказати, що це взагалі, це підмножина. Це варіант від'єднати інтерфейс користувача від бізнес-логіки під ним. Я б описав це як рідний брат MVC. З перших днів роботи ООП люди шукають способи від'єднати інтерфейс користувача від своєї логіки. MVC був першим архетипом, який розвивався. Це досить просто, хоча більшість людей не розуміють це правильно. Погляд є лише спостерігачем за моделлю і викликає її при необхідності. Контролер - це лише стратегія для представлення зв'язку з моделлю, наприклад, коли вам потрібна обмінна поведінка (наприклад, ReadonlyController, AdminController). MVC дуже успішний, і це дійсно хороша практика застосовувати його.

MVVM - це спеціалізований вид MVP Pattern, як описав Мартін Фаулер . MVP намагається зберегти вигляд якомога тупішим (при цьому все ще беручи інформацію користувача тощо), тим самим підвищуючи доказовість. Він спрямований на абстрагування погляду та логіки взаємодії, яку слід викласти у ведучого. Ведучий виключно спілкується з моделлю / бізнес-логікою та оновлює представлення даних. Мартін Фаулер досить описує MVVM у своїй моделі презентаційної моделі.

Вид повністю абстрагується у ViewModel. Коли Viewпотрібна власність, вона ViewModelповинна мати її також. Це (ViewModel) покликане бути абсолютно незалежним від основної UI-технології, абстракції. Щоб спілкуватися між View і ViewModel, потрібно використовувати схему синхронізації (тобто Observer). Це не просто зробити в веб-середовищі без громадянства. MVVM відрізняється від MVP, оскільки View більше не пов'язується з вашою моделлю / логікою бізнесу, а замість ViewModel.

Який шаблон сучасний і який слід вибрати для Windows & Web версій своєї програми?

Модель презентації (подібна до MVVM) теоретично повинна бути повністю незалежною від використовуваних UI-технологій. Однак аспект синхронізації повинен бути висвітлений. Це легко зробити, прив’язавши до команд і властивостей з WPF, де вже присутній клей для синхронізації. З ASP.NET це вже інша історія. Однак є стаття про CodeProject, в якій використовується модель шаблону презентації з усіма технологіями інтерфейсу Windows. Гляньте.


4

Через проблеми із життєвим циклом та необхідність зберігати стан між публікаціями на сторінці, вам буде дуже важко повторно використовувати 100% вашого коду без інтерфейсу між веб-та WPF. Asp.net не має потужного прив'язки даних, необхідного для MVVM, також багато логіки потрібно запустити в jscript в ці дні, оскільки люди очікують, що інтерфейс користувача оновить своє самоврядування, не потребуючи поштового зворотного зв'язку.

Якби ви могли використовувати SilverLight, ваше життя було б набагато менш складним :-)

Так само ви можете розмістити веб-браузер у програмі WPF для загальних бітів інтерфейсу?


Які переваги я можу отримати від SilverLight?
RPK

1
@PRK, Silverlight здебільшого дозволить вам робити все, що робить WPF, і якщо ви зможете всіх своїх користувачів "Інтернету" встановити, він також дозволить створити рішення, доступ до якого використовується в Інтернеті і "відчуває себе" як веб-додаток.
Ян

4

Намір використовувати однакові класи для інтерфейсу на базі ASP.Net та WPF не дуже практичний. Обв'язка даних та використання javascript в Інтернеті дуже відрізняються від WPF. Єдиний варіант, про який я можу подумати - це MVP з повністю пасивним видом . Теоретично у вас може бути той самий ведучий, який заповнює веб-сторінку та сторінку WPF.
На практиці я буду розробляти архітектуру, де більшість ділових правил знаходиться в шарі веб-сервісу та два різних рівня презентації з якомога меншими бізнес-правилами, які спілкуються з цією веб-службою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.