Giter VIP home page Giter VIP logo

ddd-patterns-typescript's Introduction

DDD Patterns

Como modelar um software utilizando DDD e como aplicar os principais patterns que estão envolta do conceito de modelagem

Link do curso: https://plataforma.fullcycle.com.br/courses/222/168/167/conteudos

Descrição

O desenvolvimento orientado a DDD (Domain-Driven Design), também conhecido como "Desenvolvimento Orientado ao Domínio", é uma abordagem de design de software que se concentra em entender e modelar o domínio do problema em questão. O DDD é baseado na ideia de que o sucesso de um software depende de uma compreensão profunda do domínio específico no qual ele está sendo aplicado.

No DDD, o domínio refere-se ao conjunto de regras, conceitos e lógica de negócios que estão relacionados a um problema específico. O objetivo principal do DDD é desenvolver software que reflita com precisão esse domínio, permitindo uma melhor comunicação entre os especialistas do domínio e os desenvolvedores de software.

No desenvolvimento orientado a DDD, a modelagem do domínio é realizada colaborativamente entre especialistas do domínio e desenvolvedores, geralmente usando linguagem ubíqua, que é uma linguagem comum que ambos entendem e usam para descrever o domínio. A modelagem é geralmente realizada por meio de diagramas, como diagramas de classes, diagramas de sequência e diagramas de estados.

Uma das principais características do DDD é a ênfase na divisão do sistema em diferentes contextos delimitados, chamados de bounded contexts. Cada bounded context representa uma parte específica do domínio e pode ter seu próprio modelo de domínio, regras e terminologia. Essa abordagem ajuda a simplificar a complexidade do sistema e permite um desenvolvimento mais modular e escalável.

Outro conceito importante no DDD é o de agregados. Um agregado é um grupo de objetos relacionados que são tratados como uma unidade coesa. Eles têm uma raiz de agregado, que é a entidade principal e o ponto de entrada para a interação com o agregado. Os agregados ajudam a garantir a consistência e a integridade dos dados dentro do domínio.

Além disso, o DDD também promove o uso de padrões de design como Value Objects (objetos de valor), Entities (entidades), Services (serviços) e Repositories (repositórios), que são responsáveis por representar e manipular os conceitos do domínio de forma eficaz.

Em resumo, o desenvolvimento orientado a DDD é uma abordagem de design de software que coloca o domínio do problema em primeiro plano, buscando uma melhor compreensão e representação do mesmo. Isso resulta em sistemas mais alinhados com as necessidades do negócio, melhorando a qualidade e a manutenibilidade do software.

Configurando projeto

Instalando as dependências

npm install

Rodando os testes unitários

npm run test

Resultado o último teste executado

> @ test /home/tayron/Arquivos/Projetos/Estudos/ddd-patterns-typescript
> npm run tsc -- --noEmit && jest


> @ tsc /home/tayron/Arquivos/Projetos/Estudos/ddd-patterns-typescript
> tsc "--noEmit"

 PASS  src/infrastructure/customer/repository/sequelize/customer.repository.spec.ts
 PASS  src/infrastructure/product/repository/sequelize/product.repository.spec.ts
 PASS  src/infrastructure/order/repository/sequilize/order.repository.spec.ts
 PASS  src/domain/@shared/event/event-dispatcher.spec.ts
  ● Console

    console.log
      Sending email to .....

      at SendEmailWhenProductIsCreatedHandler.handle (src/domain/product/event/handler/send-email-when-product-is-created.handler.ts:8:13)
          at Array.forEach (<anonymous>)

    console.log
      Esse é o primeiro console.log do evento: CustomerCreated

      at ExecuteConsoleLogWhenCustomerIsCreatedHandler.handle (src/domain/customer/event/handler/execute-console-log-when-customer-is-created.handler.ts:8:13)
          at Array.forEach (<anonymous>)

    console.log
      Esse é o segundo console.log do evento: CustomerUpdatedEvent

      at ExecuteConsoleLogWhenCustomerIsUpdatedHandler.handle (src/domain/customer/event/handler/execute-console-log-when-customer-is-updated.handler.ts:8:13)
          at Array.forEach (<anonymous>)

    console.log
      Endereço do cliente: cd0d4249-05a5-4dcb-912c-323ab6e3eb73, John foi alterado para: Street 2,2, 
            City - 12345-678

      at ExecuteConsoleLogWhenCustomerAddressIsUpdatedHandler.handle (src/domain/customer/event/handler/execute-console-log-when-customer-address-is-updated.handler.ts:12:13)
          at Array.forEach (<anonymous>)

 PASS  src/domain/customer/entity/customer.spec.ts
 PASS  src/domain/checkout/entity/order.spec.ts
 PASS  src/domain/product/entity/product.spec.ts
 PASS  src/domain/customer/factory/customer.factory.spec.ts
 PASS  src/domain/product/factory/product.factory.spec.ts
 PASS  src/domain/checkout/service/order.service.spec.ts
 PASS  src/domain/checkout/factory/order.factory.spec.ts
 PASS  src/domain/product/service/product.service.spec.ts

Test Suites: 12 passed, 12 total
Tests:       6 skipped, 43 passed, 49 total
Snapshots:   0 total
Time:        2.547 s
Ran all test suites.

ddd-patterns-typescript's People

Contributors

argentinaluiz avatar tayron avatar wesleywillians avatar

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.