【发布时间】:2013-04-10 11:40:26
【问题描述】:
我的 3 层架构大致如下所示:
客户 -> 业务 -> 数据
理想的交易应该从哪里开始?
一个学派认为事务应该只从数据层的顶部开始。业务层只用业务逻辑操作业务对象,从不知道事务。业务完成所有工作来操作对象,然后将它们交给数据层进行持久化。这是一种适用于较低层的有点 RESTful 的哲学。
另一个学派认为事务应该从业务层的顶部开始。业务层定义逻辑工作单元,而不是数据层,因为逻辑工作单元有时包含业务逻辑,而不仅仅是数据逻辑。
我确实喜欢尽可能降低交易关注度的想法。但我也发现它可能需要额外的努力和设计挑战来尝试将业务逻辑排除在数据层之外,除非它只是 CRUD 操作。如果您将 RESTful 设计模式与大锤一起应用,则可以使您的应用程序几乎没有非 CRUD 操作。
甚至还有第 3 流派认为,客户端可以启动交易,以便在需要时组合多个业务操作。但是现在客户正在定义工作单元?这不是商业问题吗?
第 4 流派认为,我的客户端可能只是 SOA 组件,可以参与甚至在客户端外部启动的 XA 事务!!
我们的开发人员想要一些更具体的标准,而不仅仅是“随心所欲地开始交易”
有人对这个问题有什么意见或建议吗?
谢谢!
【问题讨论】:
-
FWIW,Java EE 使用会话 Bean 启动事务,会话 Bean 实际上是业务层。 (但 Java EE 通常会做出有利于集成而牺牲解耦的设计选择)