todos os meus arquivos num único diretório e depois dividí-los? • Como devo dividir meu código e em quais pacotes? • Como devo estruturar minhas APIs em Go? • Por que alguns projetos têm um diretório cmd e qual é a vantagem disso? • Quais convenções devo adotar ao escrever código em Go?
fazer sentido • Fácil de mudar, fracamente acoplada • Fácil de testar • Design reflete exatamente como o software funciona • Estrutura reflete exatamente o design
de UI • Independente de banco de dados • Independente de qualquer agente externo • Divide o código em quatro camadas • Entities: representam as entidades das regras de negócio • Use Cases: as regras de negócio da aplicação • Controller: adaptam e convertem os dados do formato usado pelas entidades e use cases para agentes externos como banco de dados, web, etc • Framework & Driver: frameworks e ferramentas como banco de dados, frameworks web, etc
adicionar um filme. • Usuários podem adicionar uma avaliação para um filme. • Usuários podem listar todos os filmes. • Usuários podem consultar o detalhe de um determinado filme. • Usuários podem listar todas as avaliações de um determinado filme. • Capacidade de adicionar alguns dados de amostra.
principais. • Utilize um sub-pacote de mock compartilhado. • Nomenclaturas • Escolha nomes de pacotes que sugiram bem o que se pode esperar dentro. • Os pacotes devem comunicar o que eles fornecem, ao contrário do que eles contêm. • Evitar nomes genéricos como util, common, etc. • Siga as convenções habituais (https://talks.golang.org/2014/names.slide). • Evitar stutter (exemplo: strings.Reader não strings.StringReader)
de nível superior: • cmd (para os binários) e pkg (para os pacotes). • Dependências: pacotes próprios. • Mocks: sub-pacotes compartilhados. • Todos os outros arquivos (fixtures, resources, docs, Docker, …) ficam no diretório raiz do seu projeto • Pacote main inicializa e amarra tudo junto. E o arquivo main.go deve ser enxuto. • Evitar escopo global e funções init()
lhe atender. • “Seja como a água” • "Tudo deve ser o mais simples possível, mas não simplório." • Mantenha consistência • Experimente! • Compartilhe suas ideias
• Referência: • The Clean Architecture por Robert C. Martin (Uncle Bob) • Clean Architecture using Golang por Elton Minetto • How Do You Structure Your Go Apps? por Kat Zień • Go best practices por Brian Ketelsen • Arquitetura Hexagonal por Camila Campos