MVVM или MVC? Хотите использовать один и тот же набор классов для WPF и ASP.NET

10

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

Я хочу изучить их понимание, перепроектировав старый инвентарь и приложение для выставления счетов, которое я разработал для клиента. Я хочу написать как приложение для Windows на базе WPF, так и веб-версию. Я хочу использовать один и тот же набор классов, если это возможно, если нет, то хотя бы с небольшими изменениями.

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

Есть ли простая пошаговая ссылка на MVVM? Является ли MVVM надмножеством или подмножеством MVC? Какой шаблон является современным и какой я должен выбрать для Windows и веб-версий моего приложения?

Есть определенные классы, которые мне редко нужно связывать с View. В этом случае разработка одного и того же класса способом MVVM окажется дополнительным трудом.

RPK
источник

Ответы:

10

Есть ли простая пошаговая ссылка на MVVM?

Да, есть. Посмотрите на здесь.

Является ли MVVM надмножеством или подмножеством MVC?

MVVM принадлежит к семейству MVC, так что, если можно так сказать, это подмножество. Это вариант отсоединения пользовательского интерфейса от бизнес-логики. Я бы описал это как родного брата MVC. С первых дней ООП люди искали способы отделить интерфейс от своей логики. MVC был первым архетипом, который развился. Это довольно просто, хотя большинство людей не понимают это правильно. Представление является просто наблюдателем модели и вызывает его при необходимости. Контроллер - это просто стратегия для представления для связи с моделью, например, когда вам нужно обменное поведение (например, ReadonlyController, AdminController). MVC очень успешен, и это действительно хорошая практика применять его.

MVVM - это специализированная разновидность паттерна MVP, описанная Мартином Фаулером . MVP старается сохранить представление настолько тупым, насколько это возможно (все еще принимая пользовательский ввод и т. Д.), Тем самым повышая тестируемость. Он направлен на абстрагирование представления и логики взаимодействия, которые должны быть представлены в докладчике. Презентатор взаимодействует исключительно с моделью / бизнес-логикой и обновляет представление. Мартин Фаулер описывает MVVM в значительной степени в своей модели представления модели.

Представление полностью абстрагируется в ViewModel. Когда Viewнужна собственность, ViewModelнужна и она. Он (ViewModel) должен быть полностью независимым от базовой UI-технологии, абстракция. Для связи между View и ViewModel необходимо использовать шаблон синхронизации (т. Е. Observer). Это нелегко сделать в веб-среде без состояния. MVVM отличается от MVP, так как View больше не привязывается к вашей модели / бизнес-логике, а к ViewModel.

Какой шаблон является современным и какой я должен выбрать для Windows и веб-версий моего приложения?

Модель представления (MVVM-подобная) в теории должна быть полностью независимой от используемой UI-технологии. Тем не менее, аспект синхронизации должен быть покрыт. Это легко сделать, привязав к командам и свойствам WPF, где клей синхронизации уже присутствует. С ASP.NET это другая история. Однако есть статья о CodeProject, в которой используется шаблон модели представления со всеми технологиями пользовательского интерфейса Windows. Посмотри.

сокол
источник
4

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

Если бы вы могли использовать SilverLight, ваша жизнь была бы намного менее сложной :-)

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

Ян
источник
Какие преимущества я могу получить с SilverLight?
РПК
1
@PRK, Silverlight, в основном, позволит вам делать все, что делает WPF, и, если вы сможете заставить всех своих «веб-пользователей» установить его, также позволит создать решение, доступ к которому возможен через Интернет и «ощущается» как веб-приложение.
Ян
4

Ваше намерение использовать одни и те же классы для интерфейса на основе ASP.Net и WPF не очень практично. Привязка данных и использование javascript в Интернете сильно отличается от WPF. Единственный вариант, который я могу придумать, это MVP с полностью пассивным обзором . Теоретически у вас может быть тот же докладчик, который заполняет веб-страницу и страницу WPF.
На практике я буду разрабатывать архитектуру, в которой большинство бизнес-правил находятся на уровне веб-службы и двух разных уровнях представления с минимально возможными бизнес-правилами, которые взаимодействуют с этим веб-сервисом.

softveda
источник