2009-11-25 63 views
2

如果我實現一些簡單的OR/M工具,我應該在哪裏放置身份映射?顯然,每個Repozitory都應該可以訪問自己的身份映射,所以它可以註冊已加載的對象(或者DataMapper是在IdentityMap中註冊對象的人)。IdentityMap所在的位置:UnitOfWork或Repository?

當我提交工作單元時,還需要訪問標識映射以查看哪個實體是髒的,哪個是乾淨的(或者我又錯了,並且有一些外部對象調用了我的RegisterClean/RegisterDirty方法UnitOfWork類?那麼這是什麼對象?)。

這是否意味着我應該將IdentityMap實現爲一個完全獨立的對象,其中包含每個實體類型的內部IdentityMaps?

對IdentityMap,Repozitory和UnitOfWork如何協同工作非常困惑。

回答

3

用我們的.NET O/R Mapper, LightSpeed,我們將身份地圖放在工作單元課程的內部。這對我們來說工作得非常好,感覺很自然,因爲它在工作單位的生活中充當了查詢目的的一級緩存。

一般來說,注入或以某種方式爲您的Repository類提供一個UoW,以便您有一個有效的範圍和網關來查詢。

我希望有幫助。

+0

據我所知,如果我有例如CustomerRepsitory與方法GetCustomersBySurname,這將啓動工作單元,因爲存儲庫本身將無法註冊對象到身份映射?但是如果我的工作單元默認使用事務,那麼在讀數據時開始事務並不好,所以UoW需要一些方法來查看它是否只包含讀取,然後不開始事務。 無論如何,很高興看到一些優選簡單的OR/M工具的類圖。不知何故,我找不到任何。 – JustAMartin 2009-11-25 22:25:19

相關問題