Ich versuche, ein Projekt mit der hier beschriebenen sauberen Architektur zu erstellen . Ich habe in Go einen großartigen Artikel darüber gefunden .
Das Beispiel ist sehr einfach, und der Autor fügt seinen Code in Pakete ein, deren Namen auf der Ebene basieren, in der sie sich befinden. Ich mag die Idee von Onkel Bob, dass die Architektur einer Anwendung ihre Absicht klar kommunizieren sollte . Daher möchte ich, dass meine Anwendung Pakete der obersten Ebene enthält, die auf Domänenbereichen basieren. Meine Dateistruktur würde also ungefähr so aussehen:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
Das Problem dabei ist, dass mehrere Ebenen dasselbe Paket verwenden. Es ist also nicht ganz klar, wann die Abhängigkeitsregel verletzt wird, da Sie keine Importe haben, die zeigen, was von was abhängt.
Ich komme aus einem Python-Hintergrund, in dem dies kein so großes Problem darstellt, da Sie einzelne Dateien importieren können, also customers.interactor
importieren können customers.domain
.
Wir könnten in gO etwas Ähnliches erreichen, indem wir Pakete verschachteln, sodass das Kundenpaket ein Domänenpaket und ein Interaktorpaket usw. enthält. Dies fühlt sich klobig an, und gleichnamige Pakete können ärgerlich sein.
Eine andere Möglichkeit wäre, mehrere Pakete pro Domain-Bereich zu erstellen. Eine namens customer_domain, eine namens customer_interactor usw. Aber das fühlt sich auch schmutzig an. Es passt nicht gut zu den Richtlinien für die Paketbenennung von Go und sieht so aus, als ob alle diese separaten Pakete irgendwie gruppiert werden sollten, da ihre Namen ein gemeinsames Präfix haben.
Was wäre ein gutes Dateilayout dafür?