В современном программировании с использованием Spring MVC и интерактивных пользовательских интерфейсов веб-приложение на самом деле имеет 4 слоя:
Уровень пользовательского интерфейса (веб-браузер, JavaScript)
MVC Контроллер, т.е. компоненты пружины, отмеченные @Controller
Сервисный уровень, т.е. компоненты пружины, обозначенные @Service
Уровень доступа к данным, т. Е. Компоненты Spring, помеченные @Repository
Каждый раз, когда один из этих уровней взаимодействует с нижележащим уровнем, им необходимо отправлять / получать данные , которые обычно являются POJO, для передачи данных между слоями. Эти POJO являются DTO, то есть объектами передачи данных.
Между уровнями должны использоваться только DTO, и они не обязательно одинаковы, например, сервисный уровень может применять бизнес-логику c к DTO, полученным из доступа к данным. Уровень, поэтому DTO API Service Layer отличается от API уровня доступа к данным. Аналогичным образом, контроллер может переупорядочить данные, чтобы подготовить их к представлению (группирование, сводка и т. Д.), Поэтому данные, отправляемые в веб-браузер, отличаются от данных, полученных с уровня обслуживания.
При полном абстракция, API уровня доступа к данным не должен отражать технологию доступа к данным, то есть, использует ли он JDB C, JPA, No SQL, веб-сервис или какие-либо другие средства хранения / извлечения данных. Это означает, что классы Entity не должны выходить за пределы уровня доступа к данным.
Большинству проектов не нужен этот уровень абстракции, поэтому DTO обычно являются классом Entity и передают все путь от уровня доступа к данным до контроллера, где он используется либо представлением, либо отправляется в веб-браузер в кодировке JSON.
Это зависит от размера и сложности проекта. , Чем больше проект, тем важнее сделать каждый слой максимально абстрактным / автономным.