
Découvrez le rôle stratégique des DTO dans l'optimisation des échanges de données et la performance de vos applications. Notre guide complet vous explique en détail leur définition et leurs avantages pour une architecture logicielle moderne.
C'est un objet qui rend possible le transfert des données entre les couches de l'application. Il permet de ne pas exposer les entités de la base de données et de ne pas retourner des données inutiles ou sensibles.
Il permet aussi d'avoir des requêtes HTTP plus légères.
Exemple classique : un tableau côté front :
| Nom | Prénom | |
|---|---|---|
| Doe | John | john.doe@yopmail.fr |
| Dupond | Micheal | dupond.micheal@yopmail.fr |
| Chantier | Jack | chantier.jack@yopmail.fr |
Pour construire un DTO il ne faut pas oublier que la requête SQL a aussi son importance.
this._dbContext.Utilisateurs
.Include(u => u.Adresse)
.Include(u => u.Documents)
.Include(u => u.Service)
.ToList();
ou
// chargement des jointures en mode eager
// exemple d'une mauvaise conception
this._userRepository.findAll();
ou
SELECT * FROM utilisateur
INNER JOIN adresse ON adresse.id = utilisateur.adresse_id
INNER JOIN document ON document.id = utilisateur.document_id
INNER JOIN service ON service.id = utilisateur.service_id;
Données retournées par l'API :
[
{
"id": 1,
"nom": "Doe",
"prenom": "John",
"email": "john.doe@yopmail.fr",
"disabled": false,
"isAdmin": true,
"password": "123456",
"service": {
"id": 1,
"nom": "Service 1"
},
"documents": [
{
"id": 1,
"nom": "Document 1"
},
{
"id": 2,
"nom": "Document 2"
}
],
"adresse": {
"id": 1,
"rue": "Rue de la paix",
"codePostal": "75000",
"ville": "Paris"
}
},
{
"id": 2,
"nom": "Dupond",
"prenom": "Micheal",
"email": "dupond.micheal.yopmail.fr",
"disabled": false,
"isAdmin": true,
"password": "123456",
"service": {
"id": 1,
"nom": "Service 1"
},
"documents": [
{
"id": 1,
"nom": "Document 1"
},
{
"id": 2,
"nom": "Document 2"
}
],
"adresse": {
"id": 1,
"rue": "Rue de la paix",
"codePostal": "75000",
"ville": "Paris"
}
},
{
"id": 3,
"nom": "Chantier",
"prenom": "Jack",
"email": "chantier.jack@yopmail.fr",
"disabled": false,
"isAdmin": true,
"password": "123456",
"service": {
"id": 1,
"nom": "Service 1"
},
"documents": [
{
"id": 1,
"nom": "Document 1"
},
{
"id": 2,
"nom": "Document 2"
}
],
"adresse": {
"id": 1,
"rue": "Rue de la paix",
"codePostal": "75000",
"ville": "Paris"
}
}
]
Dans ce cas, on peut remarquer que dans le tableau nous attendons 3 informations mais que l'API nous retourne les models avec beaucoup d'informations inutiles.
Nous ne maîtrisons pas les informations qui transitent dans notre application et de plus, ce n'est pas optimisé.
Pour résoudre ce problème, nous allons créer un DTO qui va nous permettre de retourner uniquement les informations dont nous avons besoin.
SELECT nom, prenom, email FROM utilisateur;
[
{
"nom": "Doe",
"prenom": "John",
"email": "doe.john@yopmail.fr"
},
{
"nom": "Dupond",
"prenom": "Micheal",
"email": "dupond.micheal@yopmail.fr"
},
{
"nom": "Chantier",
"prenom": "Jack",
"email": "chantier.jack@yopmail.fr"
}
]
Pour conclure il est important de maîtriser les données de bout en bout de la chaine pour les raisons suivantes :
C'est ce que les DTO permettent de faire !
Pour en savoir plus, n'hésitez pas à nous contacter, c'est par ici !
Pourquoi et comment paginer ses listes et tableaux ? Ne pas récupérer des données qui n’ont pas d’utilité immédiate. On vous explique tout !
Vue.js est l'un des frameworks JavaScript les plus populaires du moment, et devance même Angular en termes d'utilisation selon le State of JS 2023 ! Dans cet article, nous allons faire un focus sur la réactivité dans Vue.js, un élément crucial à prendre en compte pour créer des interfaces dynamiques et performantes. Dans Vue.js, celle-ci peut sembler complexe à première vue, surtout quand on la compare à d'autres frameworks comme React et son hook useState ou Angular et ses Observable. Mais en réalité, une fois les concepts clés découverts, Vue.JS est plus facile à prendre en main grâce à certains outils et techniques qui simplifient grandement la gestion de cette réactivité. Découvrons comment optimiser vos développements !
Pourquoi et comment écrire des tests unitaires ? Définition et implémentation dans une application Java Springboot