Spring环境中的领域驱动设计和交易
我曾经围绕贫乏的领域模型设计我的应用程序,所以我有很多存储库对象,这些对象被注入到大而胖的事务感知服务层。此模式称为事务脚本。这不被认为是一个好的做法,因为它导致了过程代码,所以我想转向领域驱动的设计。
在网络上阅读了几篇文章,听了克里斯·理查森(Chris Richardson)关于Parleys的演讲,并阅读了POJO in Action的DDD章节之后,我想我得到了大局。
问题是,我不知道如何在我的应用程序中组织事务。Chis Richardson在他的书中说:
表示层通过外观直接或间接调用域模型来处理来自用户浏览器的 HTTP 请求,正如我在上一章中所述,外观是 POJO 或 EJB。
到目前为止还不错,但Srini Penchikala在InfoQ文章上指出:
一些开发人员更喜欢管理DAO类中的事务,这是一个糟糕的设计。这会导致过于细粒度的事务控制,从而无法灵活地管理事务跨越多个域对象的用例。服务类应处理事务;这样,即使事务跨越多个域对象,服务类也可以管理事务,因为在大多数用例中,Service 类处理控制流。
好吧,如果我理解正确,存储库类不应该是事务性的,服务层(现在要薄得多)是事务性的(就像过去在事务脚本模式中一样)。但是,如果域对象直接由表示层调用呢?这是否意味着我的域对象应具有事务行为?如何在Spring或EJB环境中实现它?
这对我来说似乎有点奇怪,所以如果有人能澄清这一点,我会很高兴。谢谢。