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.
├── 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.
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)
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.
Sollte ich eine verschachtelte Struktur in "Domain / Service" vorbereiten und das Abfrageergebnis unten erhalten?
type (
Joined struct {
Example
Example2
}
)
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/