[GO] Beispielcode für den Sprachserver mit Clean Architecture-ähnlicher Konfiguration (mit Echo, Wire)

Einführung

Implementieren wir den REST-API-Server von Go mit einem Schwerpunkt auf der Paketstruktur, die einer Clean Architecture ähnelt. Darüber hinaus sind das Webframework [echo] von Go (https://github.com/labstack/echo) und der DI-Codegenerator wire integriert.

excuse

Bei dieser Konfiguration gibt es keinen tatsächlichen Betriebsbericht, daher habe ich ihn zuerst als Ausgangspunkt betrachtet. Es scheint Raum für Verbesserungen zu geben.

Implementierungs-Repository

img

Verzeichnisaufbau

├── cmd
│   └── server
├── db
├── domain
│   ├── model
│   └── repository
├── handler
├── infra
│   └── mysql
├── response
├── router
└── usecase

cmd

Die Hauptdatei zum Starten von Server.

db

Verbindungsinformationen zu db. Hier können auch Migrationsinformationen platziert werden. Es kann unten platziert werden.

domain/model

Die Domänenlogik einer einzelnen Entität wird hier beschrieben.

domain/repository

Persistenzinformationsschnittstelle.

handler

Handleranzahl, die von der Echoendpunktverarbeitung aufgerufen wird. Hier wurde die Konfiguration auf Dependeny Injection using Wire gesetzt.

infra

Implementierungsdetails der Persistenzverarbeitung.

response

Bestimmen Sie hier das Antwortformat gemäß Ihren Anforderungen.

router

Aggregierte Echo-Routing-Endpunktdefinitionen.

usecase

Beschreiben Sie hier eine andere Anwendungslogik als die Domänenlogik.

Bei der weiteren Implementierung zu berücksichtigende Punkte

Wo soll die DB-Transaktion abgelegt werden?

Ich bin der Meinung, dass es gut genug passt, um im Anwendungsfall zu beginnen und die DB-Sitzung als Argument zu verwenden. (Obwohl die Details zur Persistenzimplementierung nicht in der folgenden Beschreibung enthalten sind)

Sind die Schichten getrennt?

Wenn Sie es strenger machen möchten, können Sie ein separates DB-Tag in der Struktur mit infra vorbereiten und es in und aus dem Modell konvertieren. Wenn möglich, möchte ich die Modellstruktur so wie sie ist herumtragen und die Anzahl der Schritte reduzieren.

Was ist, wenn Sie eine Tabellenverknüpfung mit SQL durchführen?

Sollte ich eine verschachtelte Struktur in "Domain / Service" vorbereiten und das Abfrageergebnis unten erhalten?

type (
	Joined struct {
		Example
		Example2
	}
)

Referenz

Struktur und Design der Software für saubere Architektur von Meistern gelernt https://github.com/golang-standards/project-layout https://future-architect.github.io/articles/20200528/

Recommended Posts

Beispielcode für den Sprachserver mit Clean Architecture-ähnlicher Konfiguration (mit Echo, Wire)
Erstellen Sie eine CRUD-App mit Go with Mysql, GORM, Echo, Clean Architecture