MVC архитектурa DTO,Model mapping и преобразуване

+4 гласа
190 прегледа
попитан 2016 юни 14 от Nikola.Nikolov. (3,100 точки)

Ползвайки Spring МVC обикновено виждаме Controller,Service и Repository лейъри. Repository layer-а ползва единичен модел (Entity model), който едно към едно  се мапва с database-а .Чудих се следните неща:

  1. Трябва ли Service layer-а да ползва същия Entity модел?
  2. Трябва ли Service layer-a да ползва различен домейн модел? Ако да,тогава to/fro
     mapping-а трябва ли да е направен в Service layer-a?
  3. Трябва ли Controller layer-а да ползва същия домейн модел?
  4. Трябва ли Controller layer-а да ползва отделен DTO модел? Ако да,тогава to/fro  mapping-а трябва ли да бъде в Controller layer-а?
  5. Има ли лесен начин да мапваме без да пишем прекалено много празнословен код? Ползвал съм Dozer няколко пъти.

 

1 отговор

+1 глас
отговорени 2016 юни 15 от G.Ivanoff. (920 точки)
Ще се опитам да отговоря на всички въпроси:

1.Да.

2.Не - Service-а трябва да работи на  Entity модела върнат от Repository обекта.

3.Не – контролера трябва да ползва DTO. DTO- то трябва да съдържа полетата и анотациите за валидиране ( ако ползваш JSR303).

4.Да – DTO-тата се ползват в layer-a на контролера и трябва да излагат конструктор,който приема Entity модела. Преобразуването на Entity модела в DTO се случва в конструктора. По същия начин за Entity модела. Entity модела трябва да излага overload-нат контруктор, който приема DTO обект като аргумент. Преобразуването на DTO към Emnity модел трябва да става там.

5. Overload-натия конструктор на DTO (Entity модел като аргумент) и Entity модел (DTO като аргумент) са празнословни.
...