设计问题:系统中不同类型的事务

时间:2010-07-27 07:50:53

标签: oop interface

在我的框架中,我有一个ITransaction界面 它实现了一些基本操作,如Commit()和Rollback(),它用于平面文件和其他数据源 然而,NHibernate也有一个ITransaction接口 它与我的界面不同,因为有一些数据库特定的方法,但有相似之处 我的问题是我希望NHibernate事务被视为我自己的事务,因此我将能够更轻松地在数据库和平面文件之间切换实现。
我如何组合这两个接口,以便NHibernate仍然可以接受我的NHibernate事务对象,我的框架将能够接受我的NHibernate事务对象,因为它们属于MyFramework.ITransaction?

1 个答案:

答案 0 :(得分:1)

你有一个共同的基类,可以实现NHibernate.ITransaction和MyFramework.ITransaction吗?我不知道我会因为实现这两个接口的唯一原因而创建一个公共基类,但是如果由于其他原因你已经有了一个公共基类,为什么不呢?

MyFramework.ITransaction可以从NHIbernate.ITransaction继承,确保MyFramework.ITransaction的所有实现者在NHibernate.ITransaction时也是实现者。

最后,您可以使用ITransactionWraper和2个实现器(MyFrameworkTransactionWrapper和NHibernateTransactionWrapper)实现适配器模式。您的所有代码都将写入ITransactionWrapper接口,其实现者会将调用委托给正确的ITransaction。与大多数Adapter模式实现一样,您可能会使用Factory或AbstractFactory模式在运行时创建正确的包装器,如配置所指示的那样。