gpt4 book ai didi

java - 使用什么设计模式来实现事务或链接机制

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:55:33 24 4
gpt4 key购买 nike

我用 C# 和 Java 实现了一个简单的工厂类。此类构建具有相同接口(interface)的具体工作类的实例。特别是所有这些类都有这样的方法:

create
select
alter
etc.

现在我想要一种机制(建立在一些经典/非经典模式之上),允许我创建这些方法的“链”或将它们封装在一种事务中。在伪代码中,我希望看到如下内容:

Transaction tnx = create(...args...).alter(...args_2...);
//tnx.Execute();

或者类似的东西:

Transaction tnx;
tnx.Start();
tnx.Add(method_name, ... variable list of arguments ...);
tnx.Add(another_method_name, ... variable list of arguments ...);
tnx.Execute();

我不太擅长设计模式,我不确定该使用哪种模式。我希望有人可以共享并删除几行代码(使用 C# 或 Java)来演示如何实现这一点。谢谢!

最佳答案

工作单元 是表示域事务的正确模式。

它累积更改(添加、更新和删除),并且可以自动接受或丢弃它们。原子性由整个工作单元的实现来保证,实现者必须确保更改以原子方式持久化或丢弃。

检查 Martin Fowler 如何定义它 on his pattern catalog :

Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems.

工作单元模式的可能接口(interface)可能是:

public interface IUnitOfWork
{
void Commit();
void Rollback();
}

并且你还可以在接口(interface)中添加如下方法:

// Note I've added a generic type parameter to define what kind of
// objects will handle the whole unit of work
public interface IUnitOfWork<TObject>
{
void RegisterNew(TObject some);
void RegisterUpdated(TObject some);
void RegisterDeleted(TObject some);
void Commit();
void Rollback();
}

无论如何,所有更新都应该使用由工作单元监控的更改跟踪来处理,并且一些添加删除也是:

  • 如果您将一个新对象添加到与某个其他对象相关联的集合中(1-n 关联),工作单元应该能够检测到该对象是脏的,并且应该在不手动告知对象的情况下将其持久化这样做的工作单元。

  • 同样适用于移除。如果您从 1-n 关联中删除一个对象并且没有其他对象引用它(孤立对象),它应该被自动标记为已删除

大多数数据映射器(如 OR/M 框架)已经使用对象代理拦截属性集调用来实现对象更改跟踪。

关于java - 使用什么设计模式来实现事务或链接机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33593767/

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