Комбиниране на MVVM и N-Tier архитектура

Изглежда, че VM = Business Logic Layer и че моделът = Entities/DTO. В моята бизнес логика правя валидиране на бизнес правила като дали FirstName е празно и т.н. и изглежда, че това може да бъде и работа на ViewModel, така че къде трябва да се намира бизнес валидирането, ако трябва да използваме шаблона за проектиране на MVVM в N-Tier архитектурно приложение? И моделът е само DTO, така че ще има ли нужда от модел в N-Tier приложение?

Благодаря!


person Rodelio Martinez Rodriguez    schedule 20.05.2013    source източник


Отговори (1)


Според Wikipedia, моделът представлява "концепции и връзките между тях". Като цяло, в многослойна архитектура понятието модел е локално за нивото. Защо? Защото не искате да замърсите цялото приложение с информация, която може да е подходяща само в едно от нивата. Например концепцията за клиент в слоя на потребителския интерфейс може да бъде много различен звяр от концепцията за клиент в слоя за достъп до данни (може да очаквате от тях да разкрият различни методи).

Следователно М в MVVM се отнася до модела в презентационния слой - който е (да речем) обектът, представящ концепцията на клиента в света на потребителския интерфейс. Може да е напълно подходящо това да бъде обикновен DTO или може да искате да придадете на входящия DTO обект допълнително поведение (може би с помощта на модел на адаптер), преди да го приемете като елемент от вашия модел. Бих искал да добавя диаграма тук за пояснение, за съжаление моята репутация не ми позволява!

person Lawrence    schedule 20.05.2013
comment
В моя случай моят модел е само за свойства, представляващи колоните в таблиците и те по своята същност са много еднакви с моя DTO, така че съм в затруднено положение, ако все пак трябва да създам отново DTO от потребителския интерфейс, за да бъде предаден на BusinessLayer, ако моделът и DTO са много сходни. Всъщност имам друг проект в моето решение, където поставям своите DTO, и ако разбирам модела MVVM, тогава моделите могат да се намират и в друг проект, прав ли съм? - person Rodelio Martinez Rodriguez; 22.05.2013
comment
Ако вашият модел е анемичен (en.wikipedia.org/wiki/Anemic_domain_model), тогава е възможно синоним на DTO, в който случай може да е подходящо моделът да се свърже с DTO. В отговор на последния ви въпрос със сигурност е възможно (дори препоръчително!) вашите модели да се намират в различен проект от вашите изгледи и изглед-модели. - person Lawrence; 22.05.2013