Есть ли простая пошаговая ссылка на 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. Посмотри.