Estou tentando criar um projeto usando a arquitetura limpa, conforme descrito aqui . Encontrei um ótimo artigo sobre como fazer isso no Go .
O exemplo é muito simples, e o autor coloca seu código em pacotes nomeados com base na camada em que estão. Gosto da ideia do tio Bob de que a arquitetura de um aplicativo deve comunicar claramente sua intenção . Então, eu gostaria que meu aplicativo tivesse pacotes de nível superior baseados em áreas de domínio. Portanto, minha estrutura de arquivos ficaria assim:
/Customers
/domain.go
/interactor.go
/interface.go
/repository.go
/... the same for other domain areas
O problema é que várias camadas compartilham o mesmo pacote. Portanto, não está claro quando a regra de dependência está sendo violada, porque você não tem importações mostrando o que depende de quê.
Estou vindo de um plano de fundo do Python, onde isso não seria um problema, porque você pode importar arquivos individuais, assim como customers.interactor
importar customers.domain
.
Poderíamos alcançar algo semelhante no gO aninhando pacotes, para que o pacote customers contenha um pacote de domínio e um pacote de interação, e assim por diante. Isso parece desajeitado, e pacotes com nomes idênticos podem ser irritantes de se lidar.
Outra opção seria criar vários pacotes por área de domínio. Um chamado customer_domain, outro chamado customer_interactor, etc. Mas isso também parece sujo. Ele não se encaixa bem nas diretrizes de nomenclatura de pacotes do Go e parece que todos esses pacotes separados devem, de alguma forma, ser agrupados, já que seus nomes têm um prefixo comum.
Então, qual seria um bom layout de arquivo para isso?