como vcs organizam a estrutura de projetos kotlin ...
# brazil
t
como vcs organizam a estrutura de projetos kotlin no backend? No java + spring, eu sempre trabalhei com algo próximo disso: https://github.com/khandelwal-arpit/springboot-starterkit/tree/master/src/main/java/com/starterkit/springboot/brs queria saber se vcs tem seguido o mesmo com Kotlin. Já vi alguns exemplos onde criam o nome do diretório sendo parte do domínio da aplicação
Copy code
| user/
    - UserController.kt
    - UserRepository.kt
    - UserService.kt
| auth/
    - AuthService.kt
l
Depende...
Na minha empresa o pessoal é bem fã de Clean Architecture
Então muitos projetos estão em clean
Eu gosto de separar por domínio, +- da forma que você mostrou
t
nunca trabalhei com separação por domínio
pode mandar um exemplo de uma estrutura completa? por exemplo, onde você coloca configuração de logger, constantes do sistema, extension functions, etc?
l
Pra logger eu uso libs
Pra contantes eu uso variáveis de ambiente ou do próprio spring
Extensions ficam próximas de quem as usa. Maioria das minhas são privadas, inclusive
r
Eu gosto de seguir o hexagonal architecture
t
No meu caso, tenho algumas especificidades. As constantes de aplicação vem de um microservice, que decidade quando é necessário atualizar e os logs vão para outro microservice que decide quem avisar qual o nome dessa arquitetura, separada por domínios?
l
Domain Driven Development, talvez
Mas eu não sigo nenhum paradigma à risca, então não tenho certeza se sou a emlhor pessoa pra conversar sobre
c
Eu organizo de forma parecida, package by feature agrupados por bounded contexts
as camadas são geralmente uma fronteira HTTP, o repositório e o domínio em si
toda a regra fica no domínio
l
Uma coisa que eu particularmente não sigo pois prefiro um código mais enxuto
Não crio uma interface pra cada classe
Que vai ser implementada uma única vez
Não crio adapters pra evitar chamar a classe direto, entre outras
Em alguns casos eu acho isso bom, mas num geral não faz parte de minha codebase
c
Só trabalho com interfaces de forma mandatária pros repositórios
O domínio é livre de acoplamento a qualquer coisa que não seja domínio tbm
e a camada HTTP conhece o domínio e a interface do repositório
isso com o uso do CDI me permite injetar instancias decoradas com cache ou log quando é conveniente
t
Eu tbm não tenho esse costume de criar interface para tudo que só tem e terá uma única implementação, acho over-engineering
Eu trouxe esse questionamento por conta de um projeto que estou fazendo em kotlin com um pessoal que trampava com .NET A estrutura que eles trabalham é beeeem diferente do que eu estou acostumado