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

Upload page content

You can upload content for the page named below. If you change the page name, you can also upload content for another page. If the page name is empty, we derive the page name from the file name.

File to load page content from
Page name
Comment

  • 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