Arquivos do curso de Clean Code e Clean Architecture - Turma 11, ministrado pelo professor Rodrigo Branas.
São responsáveis por modelas as regras de negócio independetes, aplicadas em qualquer contexto e que podem ser desde um objeto com métodos até mesmo um conjunto de funções.
Possuem regras de negócio independentes, com identidade e estado que muda ao longo do tempo.
Contém regras de negócios independente, no entando são identificados pelo seu valor, sendo imutáveis, ou seja, seu valor não muda ao longo do tempo. Por exemplo, CPF, CEP, ID, Coordenadas geográficas, etc...
Realiza tarefas específicas do domínio, não tendo estado. É indicado quando a operação que você quer executar não pertence a uma entity ou a um value-object.
São uma extensão do domínio responsável por realizar a persistência dos aggregates, separando o domínio da infraestrutura.
Um repository faz operações em cima de um aggregate inteiro, um DAO não tem granularidade definida. A persistência é sempre realizada sobre um aggregate inteiro, no entanto a implementação do repository pode decidir quais registros no banco de dados devem ser atualizados.
É a API do Bounded Context, expondo operações de negócio relevantes para os clientes da aplicação, muito sinular ao Use Case do Clean Architecture. Não deve haver regras de negócio dentro dessa camada, apenas orquestração.
Ficam restritos aos serviços de infra, que ficam em uma camada independente da aplicação.
Fornecem uma separação física para um conjunto de objetos de domínio, geralmente separado por bounded context, facilitando a organização.
- Exportação de dados
- ETLs
- CRUDs
- Relatórios
- Integrações
O Aggregate é um relacionamento de objetos de domínio como entities e value objects, estabelecendo o relacionamento entre eles, tratado como uma unidade.
Se estiver difícil de implementar o repositório, talvez o aggregate seja muito grande e possa ser separado.
- Clean Code, Robert C. Martin
- Clean Architecture, Robert C. Martin
- Refactoring, Martin Fowler
- Working Effectively with Legacy Code, Michael Feathers
- Patterns of Enterprise Application Architecture, Martin Fowler
- Implementing Domain-Driven Design, Vernon Vaughn
- Design Patterns: Elements of Reusable Object-Oriented Software, Erich Gamma
- Patterns, Principles, and Practices of Domain-Driven Design, Scott Millett
- Extreme Programming Explained: Embrace Change, Kent Beck
- Microservices Patterns: With Examples in Java, Chris Richardson
- Xunit Test Patterns: Refactoring Test Code, Gerard Meszaros
The Dynamic Factory Pattern Integration Test Unit Test
Slides - Ports and Adapters Slides - Test Patterns
Ports and Adapters Pattern - Alistair Cockburn
Ports and Adapters Pattern - Juan Garrido
Endo-Testing: Unit Testing with Mock Objects
Clean Architecture - Robert Martin
Specification Pattern - Erick Eveans