Implémentons le serveur API REST de Go en mettant l'accent sur la structure de package de type Clean Architecture. En outre, le cadre Web de Go echo et le générateur de code DI wire sont intégrés.
excuse
Avec cette configuration, il n'y a aucun enregistrement d'opération réel, donc j'y ai d'abord pensé comme point de départ. Il semble y avoir place à amélioration.
├── cmd
│ └── server
├── db
├── domain
│ ├── model
│ └── repository
├── handler
├── infra
│ └── mysql
├── response
├── router
└── usecase
cmd
fichier principal pour démarrer le serveur.
db
Informations de connexion à db. Les informations de migration peuvent également être placées ici. Il peut être placé dans infra.
domain/model
La logique de domaine d'une seule entité est décrite ici.
domain/repository
Interface d'informations de persistance.
handler
Nombre de gestionnaires appelé à partir du traitement du point de terminaison d'écho. Ici, la configuration a été définie sur Dependeny Injection using wire.
infra
Détails d'implémentation du traitement de persistance.
response
Déterminez ici le format de réponse en fonction de vos besoins.
router
Définitions de point de terminaison de routage d'écho agrégées.
usecase
Décrivez ici la logique d'application autre que la logique de domaine.
Je pense que cela convient assez bien pour démarrer dans le cas d'utilisation et transporter la session DB comme argument. (Bien que les détails de l'implémentation de la persistance ne soient pas contenus dans infra,)
Si vous voulez le faire plus strictement, vous pouvez préparer une balise DB séparée dans la structure avec infra et la convertir l'une à l'autre avec le modèle, mais si possible, je voudrais transporter la structure du modèle telle qu'elle est et réduire le nombre d'étapes.
Dois-je préparer une structure imbriquée dans domaine / service
et recevoir le résultat de la requête dans infra?
type (
Joined struct {
Example
Example2
}
)
Structure et conception du logiciel d'architecture propre tirées des maîtres https://github.com/golang-standards/project-layout https://future-architect.github.io/articles/20200528/