Domain-Driven Design (DDD)

(English) Fundamentals

  • Ubiquitous Language: Establish a common, rigorous language between developers and domain experts.
  • Bounded Contexts: Define explicit boundaries within which a domain model applies and is valid.
  • Entities: Represent objects with continuity and identity that transcend changes to their attributes.
  • Value Objects: Objects that are equal based on their value attributes, rather than identity.
  • Aggregates: Cluster of associated objects treated as a unit for data changes.
  • Repositories: Mediate between the domain and data mapping layers using a collection-like interface for accessing domain objects.
  • Services: Encapsulate business logic not naturally fitting into an entity or value object.
  • Domain Events: Represent something that has happened in the domain as a first-class concept.
  • Modules: Group related domain concepts into cohesive units, facilitating understanding and maintenance.
  • Context Maps: Represent the relationships between bounded contexts and their integration strategies.
  • Anti-corruption Layer: Isolate the domain model from external systems using a translation or adapter layer.
  • Continuous Integration: Regularly integrate and validate changes to the domain model.
  • Contextualized Teams: Organize teams around bounded contexts to align with the domain structure.
  • Explicit Architecture: Define architectural boundaries based on the domain.

(Português) Fundamentos

  • Linguagem Ubíqua: Estabelecer uma linguagem comum e rigorosa entre desenvolvedores e especialistas do domínio.
  • Contextos Delimitados: Definir fronteiras explícitas dentro das quais um modelo de domínio se aplica e é válido.
  • Entidades: Representar objetos com continuidade e identidade que transcendem mudanças em seus atributos.
  • Objetos de Valor: Objetos que são iguais com base em seus atributos de valor, em vez de identidade.
  • Agregados: Agrupamento de objetos associados tratados como uma unidade para mudanças de dados.
  • Repositórios: Mediar entre o domínio e as camadas de mapeamento de dados usando uma interface semelhante a uma coleção para acessar objetos de domínio.
  • Serviços: Encapsular lógica de negócios que não se encaixa naturalmente em uma entidade ou objeto de valor.
  • Eventos de Domínio: Representar algo que aconteceu no domínio como um conceito de primeira classe.
  • Módulos: Agrupar conceitos de domínio relacionados em unidades coesas, facilitando o entendimento e a manutenção.
  • Mapas de Contexto: Representar as relações entre contextos delimitados e suas estratégias de integração.
  • Camada Anti-Corrupção: Isolar o modelo de domínio de sistemas externos usando uma camada de tradução ou adaptador.
  • Integração Contínua: Integrar e validar regularmente as mudanças no modelo de domínio.
  • Equipes Contextualizadas: Organizar equipes em torno de contextos delimitados para alinhar com a estrutura do domínio.
  • Arquitetura Explícita: Definir fronteiras arquiteturais com base no domínio.