gpt4 book ai didi

design-patterns - 对象级事务管理模式

转载 作者:行者123 更新时间:2023-12-04 07:14:40 25 4
gpt4 key购买 nike

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

我并没有真正找到什么,所以我想出了这个:使用一个可以注册 TransactionListener 的 TransactionContext。如果使用 TransactionContext 启动事务,则它将正在运行的事务注入(inject)到每个已注册的监听器中,而这些监听器又将使用正在运行的事务,否则将在需要时自行启动一个。这样我就可以很自由地决定我是否想要一个对象参与我的交易。

当有像上面这样的对象调用链时,问题就来了。开始事务时,我只知道 B 和 C 必须参与事务,所以我将它们添加到 TransactionContext。但是D呢?我真的不想将 TransactionContext 传递给 B 和 C。

我将不胜感激对我的方法的一些输入以及一些指向已证明模式的指针(甚至更好)。

最佳答案

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

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

任何一个

  • 每个人都需要注册。这意味着您必须委托(delegate)注册。 A知道它交给 BC .每一个都可能(或可能没有)有更多的代表进行注册。使用“RegisterYourselfAndYourDelegates”方法实现这一点相对简单。
  • 避开监听器设计模式。创建一个事务上下文并传递它。这用稍微简单的设计代替了注册和注入(inject)。但是,您需要有两个 Context 子类——真正的 Context 和一个不做任何事情并在事务上下文之外使用的 stub Context。

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

    对于 Python,这不是问题;上下文是一个可选参数。
  • 关于design-patterns - 对象级事务管理模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/450215/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com