При работе с моделями баз данных в качестве разработчика Java мы легко сталкиваемся с несколькими концепциями, такими как DTO и VO.
Эта статья призвана прояснить каждую концепцию и объяснить, когда и почему мы должны их использовать.
Это в значительной степени обычный поток многоуровневой архитектуры Spring.
Controller ← DTO → Service ← DTO → DAO(Mapper) ← DB
DTO (объект передачи данных) — это просто объект Java для передачи данных между каждым уровнем.
В примере платформы электронной коммерции предположим, что я хочу получить подробную информацию о магазине A.
public class Store { int storeSeq; String storeName; String storeAddress; ...(getters/setters) } public class StoreService { Store storeA = storeMapper.selectStoreByStoreSeq(storeSeq); }
Объект «Магазин» будет полностью передан из базы данных в контроллер. Объект изменяемый. (Он содержит метод установки).
Итак, мы установили DTO. Что такое ВО?
Чтобы ответить на этот вопрос, нам нужно понять реальные проблемы, с которыми мы сталкиваемся.
- Есть некоторые поля, которые нельзя предоставить конечным пользователям. В приведенном выше примере я хочу скрыть storeSeq от конечных пользователей в целях безопасности.
- Я хочу сделать объект неизменяемым, чтобы объект выполнял свою задачу по передаче данных между слоями и не менялся по пути.
Это когда объект-ценность (VO) становится полезным. Объект-ценность, как следует из этого слова, представляет собой объект, имеющий ценность. Это неизменяемый объект с переопределенным equals и методом hashCode.
ВО по сути является объектом только для чтения для сравнения и передачи данных.
Какое-то время мне было довольно сложно понять разницу между DTO и VO. Когда вы работаете над побочным проектом, который не требует сложной и многословной кодовой базы, в большинстве случаев DTO поможет. Однако, когда функция продукта изменится или количество ваших разработчиков увеличится, отделение VO от DTO сильно повлияет на производительность труда.