2010-02-17 61 views

回答

1

Repository模式和LINQ到SQL將不匹配。抱歉。

恕我直言,幾乎所有的I-hide-data-storage-from-u模式都以某種方式被破壞。要麼你有抽象漏洞,要麼需要大量的冗餘代碼。

想象一下...你有一個IRepository,它使用Linq to Sql生成一個匹配Foo數據庫表的Foo類型。真棒!一切都比我預期的更好。

除了Foo表格鏈接到條形表。所以,現在當你通過Foo的IRepository接口返回所有的Foos時,你必須保持你的DataContext活着,這樣如果有人去foreach(var bar in Foo.Bars)他們會得到他們期望的。

但是,您如何管理DataContext?你是否爲IRepository的所有實例或每個實例保留一個?當一個Bar被創建,一個新的Foo被添加到它並保存到IRepository時會發生什麼?你已經添加了一個沒有Foo存儲庫的Foo!而且情況會變得更糟,因爲不使用L2S模式的副作用會從IRepository中正常蔓延。

因此,您嘗試在您的IRepository實現中限定您的L2S類型,將您手動編碼的新類型中的所有數據進行復制。但是,你如何處理一對多和多對多的關係呢?將它全部加載到內存中,或者一塊一塊加載,確保你失去了對數據庫進行高效查詢的任何方式?

整個掛件事情令人沮喪。能夠隱藏你實際上並沒有將你的數據存儲在數據庫中的事實將是一件很美妙的事情,但除非你很幸運(即你的設計很簡單),否則你將無法脫身用它。

+0

Will:我的數據庫設計非常複雜,我不會在我的L2S中使用任何表格,而是我將使用Stored Procdure(選擇,插入,更新,刪除)。 那麼這仍然是一個問題? – 2010-02-17 18:08:26

+0

@nisa SP仍然返回L2S實體......根據數據庫的回程如何工作,處理起來可能會更容易一些。我強烈建議將一個小型原型與一些表和存儲過程一起打包。祝你好運。 – Will 2010-02-17 21:23:43

+0

我同意。沒有任何抽象可以解決破壞的數據庫設計問題。因爲有很多關係的數據庫就是這樣。破碎。當應用程序處理數據時,不需要使用複雜的關係。至少在你測試你的應用程序時不會。但是像存儲庫模式這樣的模式確實有用。如果你完全實現它們,而不僅僅是一些漏洞抽象(這是完全沒用的) – jgauffin 2013-01-13 16:35:11

2
+0

感謝泰坦,但我已經看到那篇文章,他正在使用Func 2010-02-17 16:36:13

相關問題