MoinMoin Logo
  • Comments
  • Immutable Page
  • Menu
    • Navigation
    • RecentChanges
    • FindPage
    • Local Site Map
    • Help
    • HelpContents
    • HelpOnMoinWikiSyntax
    • Display
    • Attachments
    • Info
    • Raw Text
    • Print View
    • Edit
    • Load
    • Save
  • Login

Navigation

  • Start
  • Sitemap
Revision 28 as of 2022-10-21 09:13:35
  • DomainDrivenDesign

Domain Driven Design (DDD)

  • https://en.wikipedia.org/wiki/Domain-driven_design

  • https://martinfowler.com/bliki/DDD_Aggregate.html

  • https://techbeacon.com/app-dev-testing/get-your-feet-wet-domain-driven-design-3-guiding-principles.

the essence of DDD is profoundly simple: 
  capture the domain model in domain terms, 
  embed the model in the code, 
  and protect it from corruption. 
  • Understand the business, business logic independently of the tech used
  • Capture the domain model, in domain terms, through interactions with domain experts.
  • Embed the domain terminology in the code.
  • Protect the domain knowledge from corruption by other domains, technical subdomains, etc.

EvansClassification

https://martinfowler.com/bliki/EvansClassification.html

Entity

Objects that have a distinct identity that runs through time and different representations. You also hear these called "reference objects".

  • Note: not the same as entities in ORM's (exception @Entity in JPA)

Value Object

Objects that matter only as the combination of their attributes. Two value objects with the same values for all their attributes are considered equal. I also describe value objects in P of EAA.

  • Note: Only constructor and getters. Immutable !

One important rule to follow is that value objects should be immutable. To change a value (such as my height) you don't change the height object, you replace it with a new one.

One clear division between entities and values is that values override the equality method (and thus hash) while entities usually don't.

Service

A standalone operation within the context of your domain. A Service Object collects one or more services into an object. Typically you will have only one instance of each service object type within your execution context.

  • Note: business logic and business rules

Service objects are often implemented by using global variables, class fields (monostates in Robert Martin's terminology) or singletons.

Springboot2 - hexagonal architecture

  • https://www.baeldung.com/hexagonal-architecture-ddd-spring

  • application divided into three layers:
    • application (outside)
    • domain (inside)
    • infrastructure (outside):

application layer

  • interaction with the application
  • has stuff like interfaces, RESTful controllers, and JSON serialization libraries
  • coordinates the execution of domain logic.

domain layer

  • code that implements business logic
  • define the API to communicate with external parts, like the database

infrastructure layer

  • app dependencies required to run the app
  • database configuration and Spring configuration.

DDD aggregates

  • https://www.baeldung.com/spring-persisting-ddd-aggregates

An aggregate is a group of business objects which always need to be consistent. Therefore, we save and update aggregates as a whole inside a transaction.

An aggregate root is a class which works as an entry point to our aggregate.

All business operations should go through the root.

Java JPA and DDD

  • @Entity, is the same as the Entity in DDD and it has an identity

  • @Embeddable, is the same as a value object or value type, doesn't have an identity

Repository

  • https://martinfowler.com/eaaCatalog/repository.html

A Repository mediates between the domain and data mapping layers, acting like an in-memory domain object collection.

Conceptually, a Repository encapsulates the set of objects persisted in a data store and the operations performed over them, providing a more object-oriented view of the persistence layer.

  • https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/infrastructure-persistence-layer-design

Repositories are classes or components that encapsulate the logic required to access data sources.

  • MoinMoin Powered
  • Python Powered
  • GPL licensed
  • Valid HTML 4.01