Слои
В отличие от того, что ppl писал до меня - паттерн MVVM - это не разделение слоя пользовательского интерфейса на 3 слоя, а разделение слоя пользовательского интерфейса на два дополнительных слоя - View и ViewModel.
так что, если бы у нас были DAL, BLL и UI, теперь у нас есть Model (DAL & BLL) и ViewModel + View (вместо одного UI слоя).
это все еще 3 слоя, но они организованы по-разному (и если вы действительно об этом думаете - DAL никогда не был действительно слоем - это, в большинстве случаев, вспомогательный класс, так что вышеупомянутый 3-слой был на самом деле всего 2 слоями, которые сейчас становятся 3 слоя в MVVM).
Причины
Если вы подумаете об этом, вы увидите, что в трехуровневой архитектуре, как правило, пользовательский интерфейс смешивается с кодом представления и кодом логики приложения. это нарушает SRP (принцип единой ответственности) и является плохим по нескольким причинам.
В MVVM уровень пользовательского интерфейса разделен на два уровня. ViewModel, отвечающий за логику приложения, и View, отвечающий только за презентации.
Это позволяет вам три очень важные вещи:
лучший код Ремонтопригодность .
проще работать с VS дизайнером и Blend. Смешиваемость . (это, пожалуй, самая сильная особенность MVVM. Это действительно повышает производительность)
позволяет тестировать ViewModel с помощью автоматических тестов, в то время как до сих пор нам приходилось тестировать сам интерфейс, а выполнение автоматических тестов на интерфейсе было сложным. Это называется Тестируемость
на личной заметке; Я писал в n-уровневой архитектуре в течение многих лет. Я начал практиковать MVVM чуть больше года назад. Иногда это может быть тяжело, но, черт возьми, это действительно стоит 1039 усилий.