2011-08-20 79 views
2

喲 - 這本身不是一個ravendb問題 - 這是另一個與文檔dbs有關的設計問題 。文檔db - 非規範化引用 - 最佳實踐

所以我一直在使用DenormalizedReference頗有幾分,它有 只是發生在我在很多地方,這使得DDD比較硬。

所以,說比如我有了一個孩子集合的對象:

List<DenormalizedReference<SomeType>> 

這個孩子時,父母與 實例化一個重載的構造函數接受List<SomeOtherType>

現在創建的集合 - 在ctor中,我想從SomeOtherType 集合中創建此列表,這意味着我需要爲每個SomeOtherType創建一個新的 SomeType。

沒有傳入DocumentSession到我的域名 - 這我不 打算這樣做 - 這不會工作,因爲當父AR保存我們 失去除了標識和名稱

每個子對象的屬性

其他人如何處理這個問題?

回答

4

你不能那樣做。或者說,你不應該這樣做。

有解決這個問題,通常採用靜態網關獲取會話幾種方式,但問題是,這種做法產生了延遲加載的集合,所有這有問題。

RavenDB是專門爲避免這類問題而設計的。而且你可以包含項目以避免返回到服務器,但是你不應該嘗試像這樣透明地在ID和類型之間移動。

+0

那麼使用Includes是實現我所需的最佳方式?我認爲我並沒有真正使用RavenDb來抓住一些關係概念。至少在完整的ddd/cqrs路由中可以獲得真正的價值。你會同意嗎? – iwayneo

+0

是和否。 這真的取決於你有什麼樣的env以及你如何使用它。 包括&ID是解決問題的參考方法之一,非規範化的引用是另一回事。他們有不同的成本/收益比率,取決於我們在做什麼以及我們如何使用東西 –