Что такое уровни DAO, DTO и Service в Spring Framework?

Я пишу RESTful услуги, используя весну и спящий режим. Я прочитал много ресурсов в Интернете, но они не уточнили мои сомнения. Пожалуйста, объясните мне подробно, что представляют собой слои DAO, DTO и Service в весеннем контексте? И почему использование этих слоев требуется весной для разработки служб RESTfull API.

Ответ 1

Во-первых, эти концепции являются платформенными и не являются эксклюзивными для Spring Framework или любой другой платформы.


Объект Передачи Данных

DTO - это объект, который переносит данные между процессами. Когда вы работаете с удаленным интерфейсом, каждый вызов обходится дорого. В результате вам нужно уменьшить количество звонков. Решением является создание Data Transfer Object который может содержать все данные для вызова. Это должно быть сериализуемым, чтобы пройти через соединение. Обычно на стороне сервера используется ассемблер для передачи данных между DTO и любыми объектами домена. Это часто немного больше, чем куча полей и геттеров и сеттеров для них.


Объект доступа к данным

Data Access Object доступа к данным абстрагирует и инкапсулирует весь доступ к источнику данных. DAO управляет соединением с источником данных для получения и хранения данных.

DAO реализует механизм доступа, необходимый для работы с источником данных. Источником данных может быть постоянное хранилище, такое как RDBMS, или бизнес-сервис, доступ к которому осуществляется через REST или SOAP.

DAO абстрагирует базовую реализацию доступа к данным для объектов Service чтобы обеспечить прозрачный доступ к источнику данных. Service также делегирует операции загрузки и хранения данных DAO.


обслуживание

Service объекты выполняют работу, которую приложение должно выполнить для домена, с которым вы работаете. Он включает в себя вычисления на основе входных данных и сохраненных данных, проверку любых данных, поступающих из презентации, и определение точной логики источника данных для отправки в зависимости от команд, полученных из презентации.

Service Layer определяет границу приложения и его набор доступных операций с точки зрения взаимодействия клиентских уровней. Он инкапсулирует бизнес-логику приложения, управляя транзакциями и координируя ответы при реализации своих операций.


Рекомендуемые ссылки

У Мартина Фаулера есть отличная книга по общим шаблонам архитектуры приложений, которая называется " Шаблоны архитектуры корпоративных приложений". Есть также Core J2EE Patterns, на которые стоит обратить внимание.

Ответ 2

Корпоративное приложение разделено на уровни для удобства обслуживания и разработки. Уровни предназначены для определенных типов задач, таких как:

  • уровень представления (UI)
  • Бизнес-уровень
  • Уровень доступа к данным (DAO, DTO)

Почему этот дизайн: пусть выберете пример, у вас есть приложение, которое считывает данные из db и выполняет некоторую бизнес-логику, а затем представляет его пользователю. Теперь, если вы хотите изменить свою БД, пусть говорят, что предыдущее приложение было запущено на Oracle, теперь вы хотите использовать mysql, поэтому, если вы не разрабатываете его в уровнях, вы будете делать изменения везде в приложении. Но если вы реализуете DAO в приложении, то это можно сделать легко

DAO: объект доступа к данным - это шаблон проектирования, который обеспечивает интерфейс для доступа к данным на уровень обслуживания и предоставляет различные реализации для разных источников данных (базы данных, файловые системы)

Пример кода:

public interface DaoService {
    public boolean create(Object record);
    public CustomerTemp findTmp(String id);
    public Customer find(String id);
    public List getAllTmp();
    public List getAll();
    public boolean update(Object record);
    public boolean delete(Object record);   
    public User getUser(String email);
    public boolean addUser(User user);
}

Сервисный уровень с использованием Dao

@Service("checkerService")
public class CheckerServiceImpl implements CheckerService{

@Autowired
@Qualifier("customerService")
private DaoService daoService;

Теперь я могу обеспечить любую реализацию интерфейса DaoService. Сервис и DTO также используются для разделения проблем.

Ответ 3

DAO - Объект доступа к данным :

Объект, который предоставляет общий интерфейс для выполнения всех операций с базой данных, например механизм сохранения.

public interface GenericDao<T> {
  public T find(Class<T> entityClass, Object id);
  public void save(T entity);
  public T update(T entity);
  public void delete(T entity);
  public List<T> findAll(Class<T> entityClass);
}

Посмотрите этот пример: Spring - DAO и Service layer

DTO - Объект передачи данных :

Объект, который переносит данные между процессами, чтобы уменьшить количество вызовов методов, означает, что вы объединяете более одного объекта POJO на уровне сервиса.

Например, запрос GET /rest/customer/101/orders должен получить все заказы для идентификатора клиента 101 вместе с информацией о клиенте, поэтому вам необходимо объединить Orders объекта Customer и лица с данными.

Ответ 4

Слой обслуживания:

Он получает запрос от уровня контроллера и обрабатывает запрос на уровне постоянства

  • @Controller: это аннотация, которая инициализирует весь слой контроллера.
  • @Service: это аннотация, которая инициализирует весь уровень сервиса.
  • @Repository: это аннотация, которая инициализирует весь персистентный слой.

DTO:

Это объект передачи данных, который используется для передачи свойств с уровня обслуживания на уровень персистентности.

DAO:

Это объект доступа к данным. это также известно как персистентный слой. В этом DAO мы получаем значения свойств из сервисного уровня в объекте DTO. Здесь мы пишем логику персистентности в БД.

Ответ 5

DTO - аннотация @Entity spring
DAO - это аннотация @Repository в Spring (для Spring Boot JPA вам просто нужно реализовать интерфейс, теперь вам не нужны аннотации)
Сервис - это аннотация @Service spring

Вы можете прочитать больше здесь: Доступ к данным с JPA