Exemple de code de serveur de langage Go avec une configuration de type Clean Architecture (utilisant echo, wire)

introduction

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.

Référentiel d'implémentation

img

Structure du répertoire

├── 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.

Points à considérer lors de la mise en œuvre ultérieure

Où placer la transaction DB?

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,)

Les couches sont-elles séparées?

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.

Et si vous faisiez une jointure de table avec SQL?

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
	}
)

référence

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/

Recommended Posts

Exemple de code de serveur de langage Go avec une configuration de type Clean Architecture (utilisant echo, wire)
Créez des applications CRUD avec Go avec Mysql, GORM, Echo, Clean Architecture