Quantcast
Viewing latest article 20
Browse Latest Browse All 40

In DDD, concurrency belongs to application layer?

In DDD, the model has to implement only the bussiness logic, and it has not the responsability about another things, like persistance.

So I was thinking that perhaps is in the application layer a good place, because it is the layer who get data from the database with the repository, call the methods of the domain and persists the data. Something like that:

class MyApplicationService{    public void UpdateEntity()    {        long myActualVersion = Repository.GetActualVersion(EntityToUpdate.Id);        EntityToUpdate.Update(data);        Repository.IncrementVersion(EntityToUpdate.Id);        //Do something to check if it will be update the expected version or not.        Repository.Commit();    }}

But I was thinking that perhaps it belongs to the repository, something like that:

class Repository{    Update(paramEntityId, paramNewData)    {        ActualEntity = _conntext.Get(paramEntityId);        ActualEntity.Update(paramNewData);        _context.Commit();    }}

In this case, in the database I could have a row version and it will throw an exception that could be handle in the application layer and decide if retry or not, for example.

I am thinking that perhaps the second option it is better, because concurrency is a database concern, so perhaps it is better to handle in the repository, but I am not sure if perhaps it is better in the application layer, or there are another options.

Thanks.


Viewing latest article 20
Browse Latest Browse All 40

Trending Articles