Giter Site home page Giter Site logo

ccca_11's Introduction

Clean Code e Clean Architecture Turma 11

Arquivos do curso de Clean Code e Clean Architecture - Turma 11, ministrado pelo professor Rodrigo Branas.

Entidades

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.

Entidades no DDD

Possuem regras de negócio independentes, com identidade e estado que muda ao longo do tempo.

Value Object

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

Domain Service

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.

Repositories

São uma extensão do domínio responsável por realizar a persistência dos aggregates, separando o domínio da infraestrutura.

Qual a diferença de um Repository e um DAO?

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.

Application Service

É 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.

Infrastructure Service

Ficam restritos aos serviços de infra, que ficam em uma camada independente da aplicação.

Módulos

Fornecem uma separação física para um conjunto de objetos de domínio, geralmente separado por bounded context, facilitando a organização.

Quando evitar Domain-Driven Design no nível tático?

  • Exportação de dados
  • ETLs
  • CRUDs
  • Relatórios
  • Integrações

Aggregate

Como definir o relacionamento entre diferentes entities e value objects?

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.


Materiais Sugeridos

Livros

  • 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

Aula 01 - Clean Code e Clean Architecture

Slides

Aula 02 - Test-Driven Development

Slides

The Dynamic Factory Pattern Integration Test Unit Test

Aula 03 - Ports and Adapters and Test Patterns (Stub, Spy, Mock e Fake)

Slides - Ports and Adapters Slides - Test Patterns

Live com Alistair Cockburn

Ports and Adapters Pattern - Alistair Cockburn

Ports and Adapters Pattern - Juan Garrido

The Little Mocker

Mocks Aren't Stubs

Endo-Testing: Unit Testing with Mock Objects

Aula 04 - Clean Architecture Parte 1

Slides - Clean Architecture

Clean Architecture - Robert Martin

Aula 05 - Clean Architecture Parte 2

Slides - Clean Architecture

Aula 06 - Domain-Driven Design

Slide - DDD1

Slide - DDD2

Context Map Cheat Sheet

Specification Pattern - Erick Eveans

Specification Pattern - Fabrício Rissetto

Aula 07

Slide - SOLID

Aula 08

Event-Driven Architecture

CQRS

Bibliografia

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.