0

我想我會重寫這個問題(相同的迭代)。原來是如何在EAV/CR數據庫中包裝存儲庫模式。我正在嘗試一種不同的方法。你會如何像「工廠」設計模式一樣編碼存儲庫模式?

問題:如何以「工廠」設計模式編寫數據存儲庫?我有固定數量的實體,但這些實體的屬性相當客戶特定。他們宣傳所有類似的產品,但每個客戶都會根據其業務模式爲其添加不同的信息。例如,有些人關心垃圾的百分比,而另一些人則關心所售磅數。每當我們找到其他客戶時,我們都會添加一堆字段,刪除一堆字段,然後花費數小時將每個解決方案保持最新狀態,以保持最新的通用版本。

我認爲我們可以將庫類放入工廠模式,這樣當我知道客戶類型時,我就知道他們會使用哪些字段。實際的?更好的方法? Web表單使用用戶控件,這些控件被修改以反映佈局上的字段。我們目前將佈局上找到的字段「加入」產品表中的字段,然後將CRUD公共字段「加入」。

前面的問題內容

我們有一個EAV/CR數據模型,允許不同類別同一實體。這跟蹤客戶擁有非常不同產品的產品。客戶可以定義產品的「類」,用字段加載它,然後用數據填充它。例如,

Product.Text_Fields.Name
Product.Text_Fields.VitaminEContent

如何環繞這個庫模式什麼建議嗎?

我們有一個三表EAV:產品表,值表和列表字段名稱和數據類型的元表(我們列出數據類型,因爲我們有其他表,如Product.Price和Product.Price元數據以及Product.Photo等其他產品)。客戶可以跟蹤競爭對手的百分比折扣以及實時計算等各種價格。

我們目前在C#中使用Linq to SQL。

編輯:

我喜歡下面的「動態查詢」Linq。我們DB背後的想法就像更衣室的儲物櫃。每個運動員(或客戶)都以他們希望的方式組織自己的儲物櫃,並且我們會爲他們儲存。只要他們可以做他們需要的東西,我們就不在乎儲物櫃裏的東西。

非常有趣...傳遞給存儲庫的對象可能是動態的?這幾乎是有道理的,幾乎像工廠模式。客戶可以將自己的類定義放在文本文件中,然後我們繼承它們並將它們存儲在數據庫中?

回答

1

據我所知,存儲庫模式從應用程序中抽象出數據庫的物理實現。您是否打算將數據存儲在不同的數據存儲區中?如果您對Linq to SQL感到滿意,那麼我建議您也許不需要以這種方式進行抽象,因爲它看起來非常複雜。也就是說,我可以看到,提供一個EAV風格的存儲庫,即查詢需要傳遞表,字段類型和字段名稱以及任何有條件的需要,可能會爲您提供您正在尋找的抽象。

我不確定這是否仍然符合最嚴格的條款作爲存儲庫模式,因爲您並不真正從應用程序中抽象存儲。這將成爲利益和努力之間的折騰,在那裏我無法提供幫助。

您可能想看看Codeplex上動態數據預覽中發現的Dynamic Linq擴展。