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.interactorimportar 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?