-
Notifications
You must be signed in to change notification settings - Fork 0
Home
othercodes edited this page Dec 31, 2023
·
2 revisions
Complex Heart allows you to model your domain Aggregates, Entities, and Value Objects using a set of traits. Great, but why traits and not classes? Well, sometimes you have some kind of inheritance in your classes. Being forced to use a certain base class is too invasive and personally, I don't like it. By using a set of traits and interfaces you have all the functionality you need without compromising the essence of your own domain.
The available traits are:
-
HasAttributes
Provide some functionality to manage attributes. -
HasEquality
Provide functionality to handle equality between objects. -
HasInvariants
Allow invariant checking on instantiation (Guard Clause). -
HasIdentity
Define the Entity/Aggregate identity. -
HasDomainEvents
Provide domain event management.
On top of those base traits Complex Heart provide ready to use compositions:
-
IsModel
composed byHasAttributes
andHasInvariants
. -
IsValueObject
composed byIsModel
andHasEquality
. -
IsEntity
composed byIsModel
,HasIdentity
,HasEquality
. -
IsAggregate
composed byIsEntity
,HasDomainEvents
.
For more information please check the wiki.