Maison  >  Article  >  développement back-end  >  Création d'applications de domaine ciblées. Une approche Symfony (Renvoyer le résultat)

Création d'applications de domaine ciblées. Une approche Symfony (Renvoyer le résultat)

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-24 01:36:10652parcourir

Creating focused domain applications. A Symfony approach (Returning the result)

Introduction

Ceci est le dernier article de cette série. Dans l'article précédent, nous avons créé un service d'application qui utilisait le service UserEntityBuilder pour créer l'entité. Ensuite, le gestionnaire d'entités de doctrine (qui est un service d'infrastructure) a été utilisé pour conserver et vider l'entité.
Il est maintenant temps de renvoyer un résultat à la couche de présentation.

Je voudrais rappeler que nous avons considéré les entités de doctrine comme des entités de domaine tout au long de tous les articles de la série. Je comprends que ce n'est pas tout à fait correct et qu'il vaudrait mieux séparer les entités de domaine des entités de doctrine mais, par souci de simplicité, je terminerai cet article en utilisant les entités de doctrine comme entités de domaine

Je prépare un nouvel article où je montrerai comment j'ai structuré une application Symfony complète et là vous verrez que les entités de domaine sont complètement découplées de la doctrine.

Création d'un DTO de sortie et d'un générateur de sortie

Avant de renvoyer le résultat à la couche de présentation, nous devons créer un DTO pour représenter les données que nous souhaitons renvoyer. Imaginons que nous souhaitions uniquement renvoyer les paramètres email, firstName, lastName et dob. Notre DTO de sortie ressemblerait à ceci :

readonly class UserOutputDto {

    public function __construct(
        public string $email,
        public string $firstName,
        public string $lastName,
        public string $dob,
    ){}
}

Maintenant que le DTO de sortie est prêt, il est temps de créer un service pour construire la sortie d'une entité. Ce service fera partie de notre domaine puisque nous décidons quelles informations feront partie du DTO de sortie.

class UserOutputDTOBuilder {

    public function build(User $user): UserOutputDto
    {
        return new UserOutputDto(
            $user->getEmail(),
            $user->getFirstName(),
            $user->getLastName(),
            $user->getDob()
        );
    }
}

Le générateur de sortie est assez simple, il crée un UserOutputDto passant au constructeur les paramètres des valeurs de l'entité.

Ce générateur de sortie pourrait faire partie de la couche application ou présentation puisqu'il ne contient aucune logique mais je le garderai dans le domaine comme je l'ai fait avec le UserEntityBuilder.
N'oubliez pas que le UserEntityBuilder contenait une logique supplémentaire :

  • Générer le jeton
  • Générer l'horodatage actuel

Renvoyer les données

Une fois le DTO de sortie prêt, il est temps de le diriger vers la couche de présentation. Dans notre cas, quels éléments composent la couche de présentation ?. En tenant compte du fait que nous allons générer un Symfony JsonResponse et le renvoyer sous forme de réponse HTTP, le contrôleur serait l'élément qui représenterait notre couche de présentation. Revenons-y.

readonly class UserOutputDto {

    public function __construct(
        public string $email,
        public string $firstName,
        public string $lastName,
        public string $dob,
    ){}
}

Dans le cadre de la couche de présentation, le contrôleur symfony utilise sa partie infrastructure (la fonction AbstractController json) pour générer une JsonResponse à partir des données DTO de sortie prêtes à être renvoyées dans un Réponse HTTP.
Comme vous pouvez le voir, le contrôleur symfony utilise également d'autres services d'application (DataProcessor et UserCreator) pour effectuer le processus d'appel API.

Conclusion

Dans ce dernier article de la série, nous avons exploré le processus de renvoi des données à la couche de présentation dans une application Symfony. Nous avons commencé par créer un objet de transfert de données (DTO) de sortie pour encapsuler les données utilisateur que nous souhaitions renvoyer, en particulier l'e-mail, le prénom, le nom et la date de naissance. Nous avons ensuite développé un service UserOutputDTOBuilder pour construire ce DTO à partir de l'entité utilisateur, en soulignant l'importance de définir quelles informations sont incluses dans la sortie.
Enfin, nous avons démontré comment le contrôleur Symfony agit comme couche de présentation, en utilisant la fonctionnalité JsonResponse pour renvoyer les données DTO sous forme de réponse HTTP.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn