DTO : définition, avantages et tuto !

Le 07/09/2023 Par Louis NOYAREThttpsqltutorial

Qu'est-ce qu'un DTO, Data Transfer Object ?

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 :

NomPrénomEmail
DoeJohnjohn.doe@yopmail.fr
DupondMichealdupond.micheal@yopmail.fr
ChantierJackchantier.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'APIUne API est un programme permettant à deux applications distinctes de communiquer entre elles et d’échanger des données. :

[
    {
        "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é.

Créer un DTO

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 :

  • Sécurité
  • Performance
  • Optimisation
  • Maintenance
  • Evolutivité

C'est ce que les DTO permettent de faire !

Pour en savoir plus, n'hésitez pas à nous contacter, c'est par ici !

Sommaire

  • fleche vers la droite Qu'est-ce qu'un DTO, Data Transfer Object ?
  • fleche vers la droite Créer un DTO

À voir aussi

Tous les articles