Sto provando a costruire un progetto usando l'architettura pulita, come descritto qui . Ho trovato un grande articolo su come farlo in Go .
L'esempio è molto semplice e l'autore inserisce il proprio codice in pacchetti chiamati in base al livello in cui si trovano. Mi piace L'idea di zio Bob che l'architettura di un'applicazione dovrebbe comunicare chiaramente il suo intento . Quindi vorrei che la mia applicazione avesse pacchetti di livello superiore basati su aree di dominio. Quindi la mia struttura dei file sarebbe simile a questa:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
Il problema con questo è che più livelli condividono lo stesso pacchetto. Quindi non è tutto chiaro quando viene violata la regola di dipendenza, perché non hai importazioni che mostrano cosa dipende da cosa.
Vengo da uno sfondo di Python, dove questo non sarebbe un grosso problema, perché puoi importare singoli file, quindi customers.interactor
potrebbe importare customers.domain
.
Potremmo ottenere qualcosa di simile in go da nidificare i pacchetti, in modo che il pacchetto clienti contenga un pacchetto dominio e un pacchetto interactor, e così via. Questo sembra goffo, e i pacchetti con nomi identici possono essere noiosi da gestire.
Un'altra opzione sarebbe quella di creare più pacchetti per area del dominio. Uno chiamato customer_domain, uno chiamato customer_interactor, ecc. Ma anche questo sembra sporco. Non si adatta bene alle linee guida sui nomi dei pacchetti di Go e sembra che tutti questi pacchetti separati debbano essere raggruppati in qualche modo, poiché i loro nomi hanno un prefisso comune.
Quindi quale sarebbe un buon layout di file per questo?