Clean Architecture x DDD x Modular - Qual arquitetura escolher?
Racional
Fala pessoal! Estou pensando em dar uma exercitada/estressada sobre o uso de arquiteturas robustas. Já utilizei algumas durantes os meus anos de xp, mas estou revisitando alguns racionais e tomadas de decisões... Com isso, me veio uma duvida em mente.
Qual arquitetura voce aplicaria em um projeto médio, com chances de crescimento ao longo dos anos?
Primeiro ponto em consideração: Monolith!
Segundo ponto em consideração: Tem de ser modular, com possibilidades futuras de ser desmembrado em serviços/dominios menores (Microservices ou outros monolitos menores)
Com esses pontos em mente, cheguei em algumas arquiteturas a serem aplicadas:
- Clean Architecture
- DDD => Ports and Adapters!
- Hexagonal ou Onion Architecture => Ports and Adapters!
Com isso mente, pensei novamente em outras perguntas...
- Qual a necessidade de se utilizar arquitetura tão robustas?
- Para além do contexto de multiplas mãos tocando um mesmo projeto, quais os outros ganhos em se utilizar uma arquitetura robusta?
- Testabilidade (Unitários + Integração)?
- Transformação de dominios em serviços menores (Monolith ou Microservice)
- Uma arquitetura modular e com dominios bem separados/contidos poderia ser aplicada?
- Sobrecarga de engenharia (Overengineering)?
Para conseguir responder essas duvidas, somente construindo algo e entendendo o uso de cada uma delas aplicadas ao problema. Com isso em mente elaborei algo que considero de baixa complexidade, mas que pode evoluir e se transformar em algo de média complexidade.
Projeto
Gerenciador de bibliotecas/livros que conterá:
- Editoras => CRUD
- Autores => CRUD
- Livros => CRUD
- Categorias => CRUD
- Resenhas => CRUD
- Usuários => CRUD
Regras funcionais podem ser desenhadas da forma como voce quiser.
Exemplo:
- Um titulo de um livro somente pode conter até 100 caracteres
- Um livro pode conter multiplas versões
Como processamento async pode conter:
- CRON JOB
- Validação de Livros
- Filas
- Publicação de resenhas
- Disparo de e-mails
Sempre é bom ter, mesmo que em estudos
- Observalidade (Pick one)
- Prometheus + Grafana = <3
- Cache
- Redis OU Memcached
- in memory
- Auth
- Email + Senha
- OTP
- Forgot Password
Duvidas
- Qual arquitetura seria a ideal? Não existe bala de prata
- Em caso de clean architecture, qual seria o motivo/racional?
- Em caso de DDD, qual seria o motivo/racional?
- Porque não seria uma arquitetura modular?
Arquiteturas
- Clean Architecture
- Modular by Domains
- DDD
- Hexagonal ou Onion