我正在尋找一些關於工作單位模式的建議。工作模式單位
工作單元上的提交是多次調用還是一次調用,然後讓對象進行垃圾回收?
注入工作單元遊戲或者我應該在調用對象執行某些工作時將它傳遞給方法調用是一個好主意嗎?
我正在尋找一些關於工作單位模式的建議。工作模式單位
工作單元上的提交是多次調用還是一次調用,然後讓對象進行垃圾回收?
注入工作單元遊戲或者我應該在調用對象執行某些工作時將它傳遞給方法調用是一個好主意嗎?
實現工作單元模式的類型的實例通常具有需要控制其生命週期的單個所有者。諸如Commit
,Open
,Close
和Dispose
的方法通常是強信號,其類型應該明確控制(或者在適當的情況下放置在抽象之後)。
由於這個原因,它是更好的而不是注入工作實例本身的單元,但注入知道如何創建這樣的工作單位類型:工廠。
這種情況下的工作單元作爲上下文,當其他對象需要在同一個上下文中執行操作時(例如保持操作爲原子),您需要傳遞它。這看起來像這樣:
public class MyCommand
{
private readonly IUnitOfWorkFactory factory;
public MyCommand(IUnitOfWorkFactory factory)
{
this.factory = factory;
}
public void Execute()
{
using (var context = this.factory.CreateNew())
{
this.DoSomeNiceThings(context);
context.Commit();
}
}
}
許多DI框架爲您提供了定義對象及其依賴項運行的上下文的可能性。這允許您自己注入工作單元並在其所有依賴項中注入相同的實例。這是一個非常有用的功能,但不是我在這種特定情況下會做的事情,因爲代碼的正確性取決於您配置工作單元範圍的方式。這使得你的代碼非常隱含,難以遵循並容易中斷。如果消費者不關心依賴關係,IMO此類功能在情景中尤其有用。因此,此功能對於性能優化,實施緩存策略等非常有用。
是提交工作 多次調用的單位或者只是一個時間 ,然後離開對象 垃圾回收?
多次調用Commit
是一個有效的情況取決於你如何設計它。在我的生產應用程序中,我經常在事務內部運行我的工作單元,這使得我可以將操作提交到數據庫(例如獲取數據庫生成的密鑰),同時保持業務操作的原子性。
我希望這會有所幫助。
工作單元背後的想法是封裝一個「工作單元」,例如在單個方法中從動作中強制執行的所有更改(例如,添加具有某些角色的用戶,用戶將被添加並且角色關聯與用戶)。
你會使用一個工作單元,以「批了」這些變化,並一氣呵成執行它們(通常是通過一個交易 - 因爲不同的行動彌補工作中的一個單位,如果一個失敗 - 都應該)
真的,你只會在每個工作單元中調用一次commit。大多數ORM/s像實體框架/ nhibernate允許您通過單個工作單元執行多個提交,每個提交都與代表工作單元的特定事務相關聯。
我寫過一篇關於在應用程序中編寫,僞造和注入工作單元(使用LINQ作爲抽象層)的博客文章。你可能會感興趣:http://bit.ly/gHLubu。 – Steven 2011-02-09 22:11:43