【发布时间】:2011-04-22 15:54:04
【问题描述】:
首先,我可能会问一些以前被问过和回答过的问题,但我无法得到搜索结果。我们在服务层上定义事务注解,典型的 spring hibernate crud 通常是
Controller->Manager->Dao->Orm.
我现在遇到需要在基于客户端站点的域模型之间进行选择的情况。 假设客户端 A 正在使用我的域模型,一切都很好,但是其他客户端站点会给我一个 Web 服务,而不是使用我们的域模型。
我应该更换哪一层。我相信它必须是 DAO,它将从 Web 服务获取我的数据并将其发送回。即两个单独编写的 DAO 层并根据场景插入。
我现在意识到,当我们将@Transactional 放在服务层时,我们一直在做紧耦合(如果有这样的事情或者说没有松耦合)。这么多的大脑不可能是错的,或者他们是错的(我怀疑)。
所以问题是“应该将“@Transactional”放置在服务层还是 DAO 的位置?”我应该更换向下的服务层吗?
11 年过去了,仍然有意义。如果我回顾这个项目,我当时对域模型的理解显然是错误的。我将 ORM 层视为域模型,我们希望使用 ORM 和分离实体,并且没有任何数据映射,也没有任何 DTO。那是当时的趋势。如今,域模型不是 ORM,拥有适当的域模型并使用 ORM 或 Web 服务是数据源来解决这个问题。就像许多人指出的那样,是的,服务是它的正确位置,并且具有适当的域模型,而不是将 JPA (ORM) 视为域模型。
【问题讨论】:
-
这个问题其实是Spring @Transactional Annotation Best Practice的重复问题。
标签: spring transactions dao