【发布时间】:2011-01-06 16:45:28
【问题描述】:
我曾经围绕贫乏的领域模型设计我的应用程序,所以我有许多存储库对象,它们被注入到大而胖的事务感知服务层。这种模式称为事务脚本。这不被认为是一种好的做法,因为它会导致程序代码,所以我想继续进行领域驱动设计。
在阅读了网络上的几篇文章、听了 Chris Richardson 关于 Parleys 的演讲并阅读了 POJOs in Action 的 DDD 章节之后,我想我了解了全局。
问题是,我不知道如何在我的应用程序中组织事务。 Chis Richardson 在他的书中指出:
表示层通过调用来处理来自用户浏览器的 HTTP 请求 直接或间接通过外观的领域模型,正如我 上一章中描述的是 POJO 或 EJB。
到目前为止还不错,但 InfoQ article 上的 Srini Penchikala 表示:
一些开发人员更喜欢在 DAO 类中管理事务,这是一种糟糕的设计。这会导致事务控制过于细化,无法灵活管理事务跨越多个域对象的用例。服务类应该处理事务;这样,即使事务跨越多个域对象,服务类也可以管理事务,因为在大多数用例中,服务类处理控制流。
好的,所以如果我理解正确的话,存储库类不应该是事务性的,服务层(现在更薄了)是事务性的(就像以前在事务脚本模式中一样)。但是如果领域对象被表示层直接调用呢?这是否意味着我的域对象应该具有事务行为?以及如何在Spring或EJB环境中实现?
这对我来说似乎有点奇怪,所以如果有人能澄清这一点,我会很高兴。谢谢。
【问题讨论】:
-
我添加了 java 标签,因为它涉及各种 DI+ORM(甚至不仅在 java 中,而且这是你的上下文)
标签: java design-patterns spring oop domain-driven-design