我使用C#編寫(假設)應用程序 - 在線商店。數據結構設計是靜態類型語言
我的產品數據庫,每個產品都有與之相關的以下信息:
- 產品編號(必填)
- 名稱(必須)
- 價格(必需)
- 評級(可選)
- 已售數量(可選) - 這是此產品的總銷量
我有4頁顯示過濾的產品列表。頁面顯示每個產品不同的信息:
- 第1頁:PN,名稱,價格
- 第2頁:PN,名稱,價格,評價
- 3D頁:PN,名稱,價格,銷售數量
- 第4頁:PN,名稱,價格,評級,銷售數量
我的問題是,我該如何設計數據結構,以適應我幾乎沒有重複的所有網頁?
蠻力方法是爲每個頁面創建類型:
IList<Product>
IList<ProductWithRating>
IList<ProductWithSoldQuantity>
IList<ProductWithRatingAndSoldQuantity>
後3可以從Product
派生但由於缺乏多重繼承ProductWithRatingAndSoldQuantity
不能從兩個等級,SoldQuantity產品派生。
在動態語言中,我只需添加我需要的任何字段並且很高興。
所以,我可以通過存儲額外的信息,模擬動態語言的方法(等級,出售數量)在單獨dictonaries,如:
{
IList<Product> Products;
IDictionary<Product, Rating> ProductRatings;
IDictionary<Product, SoldQuantity> ProductSoldQuantities;
}
// is equivalent to
IList<ProductWithRatingAndSoldQuantities>
構建產品結構,包括一切,然後繞過部分初始化對象是而不是我正在尋找的解決方案。
有什麼建議嗎?
哦,當我說'ProductWithRating'時,我的意思是**類型**的名稱,它具有'Rating'作爲屬性。 'ProductWithRating' **不代表只有那些有評級的產品的集合。 – 2010-11-19 22:36:48
我填充了很多或很少的屬性,因爲我可以有意義 - 通常不是所有的20在第一次嘗試。我使用EF4來完成所有的數據庫工作,因此它將所有的數據庫字段都帶回來,並且理解它們,並且實際上使用具有虛擬屬性的代理等實例化數據庫中的對象。至於你的MyRating,如果它很稀疏,我可能會將它添加爲一個新的實體/類型,與Product有0..1-1的關係(產品可以有0或1個MyRatings,MyRating只有1個產品)。 ProductWithRating路線將很快變得痛苦,不惜一切代價避免。 – RichardW1001 2010-11-19 22:56:58
您是否將產品從EF傳遞到View/ViewModel? – 2010-11-19 23:00:41