对象级事务管理模式

Mic*_*Sim 5 architecture design-patterns transactions

我正在尝试找出在对象级别(而不是数据库级别)处理事务的最佳方法.简短示例:4个对象A,B,C和D. A启动事务并调用B和C中的方法.在此事务中C也调用D.被调用的方法不应该总是参与此事务,而是也可以自己打电话.是否有任何模式来管理对象级别的事务?

我没有找到任何东西,所以我提出了这个:使用TransactionContext,其中可以注册TransactionListeners.如果使用TransactionContext启动事务,则它会将正在运行的事务注入每个已注册的侦听器,而这些侦听器将使用正在运行的事务,否则将根据需要自行启动一个事务.通过这种方式,我可以自由决定是否需要参与我的交易的对象.

当拥有如上所述的对象调用链时会出现问题.在启动事务时,我只知道B和C必须参与事务,因此我将它们添加到TransactionContext中.但D怎么样?我真的不想将TransactionContext传递给B和C.

我会很感激我的方法的一些输入以及对已证实的模式的一些指示(甚至更好).

S.L*_*ott 2

“我真的不想将 TransactionContext 传递给 B 和 C。”

为什么不?他们参与并委托给其他对象。

任何一个

  • 每个人都需要注册。这意味着您必须委托注册。 A知道它会交给BC。其中每个可能(或可能没有)有更多的受托人进行注册。使用“RegisterYourselfAndYourDelegatees”方法实现起来相对简单。

  • 避免监听器设计模式。创建事务上下文并将其传递。这用稍微简单的设计取代了注册和注入。但是,您需要有两个 Context 子类——真正的 Context 和一个不执行任何操作且在事务上下文外部使用的存根 Context。

    这使得您的函数定义稍微复杂一些。对于 Java,您可以使用重载命名来拥有两个具有不同签名的方法函数。

    对于 Python 来说,这不是问题;上下文是一个可选参数。