web-dev-qa-db-fra.com

Que sont les couches DAO, DTO et Service dans Spring Framework?

J'écris des services RESTful en utilisant Spring et Hibernate. J'ai lu beaucoup de ressources sur Internet, mais ils n'ont pas clarifié mes doutes. Expliquez-moi en détail ce que sont DAO , DTO et service couches dans le cadre de printemps? Et pourquoi l’utilisation de ces couches est nécessaire au printemps pour développer les services RESTfull API.

39
Prathap Badavath

Tout d'abord, ces concepts sont Platform Agnostic et ne sont pas exclusifs de Spring Framework ou de tout autre cadre, d'ailleurs.


Objet de transfert de données

DTO est un objet qui transporte des données entre processus. Lorsque vous travaillez avec une interface distante, chaque appel coûte cher. Par conséquent, vous devez réduire le nombre d'appels. La solution est de créer un Data Transfer Object qui peut contenir toutes les données pour l'appel. Il doit être sérialisable pour passer par la connexion. Généralement, un assembleur est utilisé côté serveur pour transférer des données entre le DTO et tout objet du domaine. C'est souvent un peu plus qu'un tas de champs et les getters et les setters pour eux.


Objet d'accès aux données

UNE Data Access Object résume et encapsule tous les accès à la source de données. Le DAO gère la connexion avec la source de données pour obtenir et stocker des données.

DAO implémente le mécanisme d'accès requis pour travailler avec la source de données. La source de données peut être un magasin persistant tel que RDBMS ou un service métier accessible via REST ou SOAP.

DAO résume l'implémentation d'accès aux données sous-jacente pour les objets Service afin de permettre un accès transparent à la source de données. Le Service délègue également des opérations de chargement et de stockage de données au DAO.


Un service

Les objets Service effectuent le travail que l'application doit effectuer pour le domaine sur lequel vous travaillez. Cela implique des calculs basés sur les entrées et les données stockées, la validation de toutes les données provenant de la présentation et la détermination de la logique de la source de données à distribuer, en fonction des commandes reçues à partir de la présentation.

UNE Service Layer définit la limite d'une application et son ensemble d'opérations disponibles du point de vue de l'interfaçage des couches client. Il encapsule la logique métier de l'application en contrôlant les transactions et en coordonnant les réponses dans la mise en œuvre de ses opérations.


Références recommandées

Martin Fowler a publié un excellent livre sur les modèles d’architecture d’application courants nommés Patterns of Enterprise Application Architecture . Il existe également Core J2EE Patterns qui vaut la peine d’être examiné.

50
Ali Dehghani

DAO - Objet d'accès aux données :

Un objet qui fournit une interface commune pour effectuer toutes les opérations de base de données telles que le mécanisme de persistance.

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);
}

Voir cet exemple: Spring - couche DAO et service

DTO - Objet de transfert de données :

Un objet qui transporte des données entre les processus afin de réduire le nombre d’appels de méthodes signifie que vous combinez plusieurs entités POJO dans la couche de service.

Par exemple, une requête GET /rest/customer/101/orders est de récupérer toutes les commandes pour le client id 101 ainsi que les détails du client, vous devez donc combiner l'entité Customer et l'entité Orders avec des détails.

5
vels4j

L'application d'entreprise est divisée en niveaux pour faciliter la maintenance et le développement. Les niveaux sont dédiés à un type particulier de tâches comme

  • couche de présentation (UI)
  • Couche métier
  • Couche d'accès aux données (DAO, DTO)

Pourquoi cette conception: Prenons un exemple. Vous avez une application qui lit les données de la base de données et exécute une logique métier sur celle-ci, puis les présente à l'utilisateur. Maintenant, si vous voulez changer votre base de données, disons que les applications précédentes fonctionnaient sous Oracle, vous voulez utiliser mysql. Si vous ne les développez pas par niveaux, vous apporterez des modifications partout dans l'application. Mais si vous implémentez DAO dans l'application, cela peut être fait facilement

DAO: Data Access Object est un modèle de conception fournissant simplement une interface pour l’accès aux données de la couche service et différentes implémentations pour différentes sources de données (bases de données, systèmes de fichiers).

Exemple de code:

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);
}

Couche de service utilisant Dao

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

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

Maintenant, je peux fournir toute implémentation de l'interface DaoService. Service et DTO sont également utilisés pour séparer les problèmes.

4
gajendra kumar

SERVICE LAYER:

Il reçoit la demande de la couche contrôleur et traite la demande vers la couche de persistance.

  • @Controller: C'est l'annotation qui initialise la couche entière du contrôleur.
  • @Service: c'est l'annotation qui initialise la couche de service entière.
  • @Repository: C'est l'annotation qui initialise la couche de persistance entière.

DTO:

C'est un objet de transfert de données qui passait des propriétés de couche de service à couche de persistance.

DAO:

C'est un objet d'accès aux données. on l'appelle aussi couche de persistance. Dans cette DAO, nous recevons les valeurs de propriété de la couche de service dans l'objet DTO. Ici, nous écrivons une logique de persistance dans db.

0
Babu Babu