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.
Tout d'abord, ces concepts sont Platform Agnostic et ne sont pas exclusifs de Spring Framework ou de tout autre cadre, d'ailleurs.
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.
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
.
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.
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é.
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.
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
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.
SERVICE LAYER:
Il reçoit la demande de la couche contrôleur et traite la demande vers la couche de persistance.
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.