【问题标题】:the transaction should be unified in the application layer or the domain layer in DDD事务应该统一在应用层或DDD中的领域层
【发布时间】:2021-07-20 09:48:45
【问题描述】:

基础设施层有一个现成的实现,其作用是将对象更新到数据库中。

public class Repository {
    public void update(AggregateRoot do, ValueObject value);
}

我应该在 ApplicationSerice 层选择事务性

public class ApplicationSerice {
    @Transactional
    public void update(AggregateRoot do, ValueObject value) {
        repository.update(do, value);
    }
}

或 DomainService 层的事务性

public class DomainService {
    @Transactional
    public void update(AggregateRoot do, ValueObject value) {
        repository.update(do, value);
    }
}

public class ApplicationSerice {
    public void update(AggregateRoot do, ValueObject value) {
        domainService.update(do, value);
    }
}

【问题讨论】:

    标签: java mysql domain-driven-design


    【解决方案1】:

    我应该在 ApplicationSerice 层选择事务性

    我相信,这是最符合 Eric Evans 所描述的模式的选择。应用程序代码负责管理事务,您通常会看到与存储库的交互发生在应用程序层而不是域层。

    参见领域驱动设计;解决软件核心的复杂性,第 6 章。

    【讨论】:

    • 我想补充一点:由于每个事务只应修改一个聚合,并且聚合是事务或一致性边界,因此域命令的调用实际上是单个事务。尽管如此,通过应用程序服务上的注释的技术事务确保调用域和保存结果的所有数据访问是一致的。因此在这一层有数据库事务是有意义的
    猜你喜欢
    • 2023-03-26
    • 2022-10-17
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多