1

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?

5
  • 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. Jun 26, 2017 at 9:01
  • Please clarify: as a result of what action is the other aggregate root created?
    – marstato
    Jun 26, 2017 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, 2017 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, 2017 at 10:28
  • What exactly is responsibility of service managing the AR?
    – Slimer
    Jun 26, 2017 at 12:10

1 Answer 1

1

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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