在我的framewrok中,我有一個ITransaction接口。
它實現了一些基本的操作,如Commit()和Rollback(),它用於平面文件和其他數據源。
然而NHibernate也有一個ITransaction接口。
它與我的界面不一樣,因爲有一些數據庫特定的方法,但有相似之處。
我的問題是,我想要一個NHibernate事務被認爲是我自己的事務,所以我將能夠更輕鬆地在數據庫和平面文件之間切換實現。
如何組合兩個接口,使NHibernate仍然能夠接受我的NHibernate事務對象,並且我的框架將能夠接受我的NHibernate事務對象,因爲它們屬於MyFramework.ITransaction?設計問題:系統中不同類型的交易
0
A
回答
1
你有一個共同的基類,它可以實現NHibernate.ITransaction和MyFramework.ITransaction?我不知道爲了實現這兩個接口的唯一原因,我會創建一個公共基類,但是如果因爲其他原因已經有了一個公共基類,爲什麼不呢?
MyFramework.ITransaction可以從NHIbernate.ITransaction繼承,確保MyFramework.ITransaction的所有實現者在NHibernate.ITransaction也是實現者。
最後,您可以使用ITransactionWraper和2個實現器(MyFrameworkTransactionWrapper和NHibernateTransactionWrapper)實現Adapter模式。您的所有代碼都將寫入ITransactionWrapper接口,其實現者將調用委託給正確的ITransaction。與大多數適配器模式實現一樣,您可能會使用Factory或AbstractFactory模式在運行時創建正確的包裝器,如配置所指示的那樣。
相關問題
- 1. 數據庫設計問題(圖書交易系統)
- 2. MATLAB中的交易系統
- 3. 的通知系統設計問題
- 4. 一個系統設計問題
- 5. 系統設計面試問題
- 6. C#類型設計問題
- 7. 高交易系統中的觸發器
- 8. 交易問題
- 9. 交易問題
- 10. 設計問題 - 共同的基類和不同的返回類型
- 11. 會計數據庫設計問題,「賬戶」和「交易」
- 12. 開始交易...提交交易問題
- 13. 在csla和手動交易系統中使用交易
- 14. 金融交易系統數據庫體系結構設計原則?
- 15. Hyperledger交易類型:創建交易
- 16. SOA和WCF設計問題:這是一個不尋常的系統設計嗎?
- 17. 用於設計語言類型系統的正確的類設計
- 18. 投票系統中的模型問題
- 19. MySQL交易問題
- 20. 如何在系統中設計兩種類型的帳戶
- 21. 關於使用許多不同子類的類型切片的設計問題
- 22. NHibernate的CreateSQLQuery交易問題
- 23. 關係數據庫設計:連接不同類型的「對象」
- 24. 使用枚舉來設計問題以建模類型關係
- 25. 失敗:(TESTMODE)無法在此係統上處理此市場類型的交易
- 26. 交易無法在此係統
- 27. 與不同類型的交易相混淆
- 28. 類設計問題
- 29. 類設計問題
- 30. Clojure中的類型系統
由於NHibernate.ITransaction具有數據庫特定的方法,因此MyFramework.ITransaction不能具有與NHibernate.ITransaction相同的接口。你將如何實現接口的適配器模式? – 2010-07-27 22:39:22
我的答案包含適配器模式的基礎知識(請參閱ITransactionWrapper),但我會嘗試擴展一點:假定NHibernate.ITransaction定義了SaveToDB()函數,並且您的ITransaction接口定義了SaveToFile()。你希望你所有的代碼只需調用Save()。您的ITransactionWrapper將定義Save()。您的MyFrameworkWrapper將實現Save()作爲對其包裝對象SaveToFile()的調用。您的NHibernateWrapper將實現Save()作爲對其包裝對象SaveToDB()的調用。你的調用代碼永遠不需要知道哪個對象被包裝。它只是調用Save()。 – mikemanne 2010-07-28 13:04:35
注意:我上面的對象命名非常快速和骯髒 - 您不想命名ITransactionWrapper接口,因爲「包裝器」描述了一個實現。 ITransactable或ISaveable將是更好的名字,但仍不完美。 – mikemanne 2010-07-28 13:05:59