I'm struggling with aggregates in actor model (akka) and how to store their state. I wonder what role does repository stands for in actor model in DDD.

I have a situation, where my aggregate root creates another aggregate as result. But internally, AR firstly creates an actor and then sends additional messages to it in foreach cycle so newly created aggregate updates its state several times and then I need to store it's state.

1. I was thinking of registering "uncommitted changes" in aggregate, so in this case I could've sent GetUncommittedChanges() to this aggregate and receive the required data.

2. Second approach might be to keep reference to repository in aggregate, but I'm skeptical about this one. But the message to aggregate could be just: SaveYourself()

3. The third approach is maybe the cleanest: That every aggregate will publish event, and according to that hitting db multiple times? e.g. AggregateCreated(somedata), AggregateUpdated(additionalData), AggregateUpdated(..) 20 times...how to handle this properly?

  • Answering this is hard without seeing the code. Can you tell why your aggregate root have to create another aggregate as a result? Having a SaveYourself() method is definitely a bad idea. What I suggest is to create the Artist model, perform all the updates and then pass it to the repository to save it. – Mohamed Bouallegue Jun 26 '17 at 9:01
  • Please clarify: as a result of what action is the other aggregate root created? – marstato Jun 26 '17 at 9:05
  • @marstato The reason why aggregate root is creating another aggregate is because in other case, it would become heavy in time, so aggregate root cannot have list of entities, instead, its serves as a factory that creates new aggregates which contains identity of its "parent" - aggregate root. – Slimer Jun 26 '17 at 10:24
  • 1
    Then this is not the responsibility of the aggregate root; its the responsibility of the service that manages the aggregate root. – marstato Jun 26 '17 at 10:28
  • What exactly is responsibility of service managing the AR? – Slimer Jun 26 '17 at 12:10

The responsibility of the application service managing AR is to load and persist the aggregate. Also, it is responsible for publishing any domain events emitted as a result of change in the state of an aggregate.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.