2011-06-09 57 views
1

假設有一個名爲HouseHoldItems的類。它可能有很多不同的項目像需要任何設計思想來過濾對象的屬性

Class HouseHoldItems 
{ 
    TV, 
    Fridge, 
    Hammer, 
    Chair, 
    Watch, 
    Shoes, 
} 

我想辦法拿出一個模式,我可以指定幾個項目,如說「電子」,「ClothBased」,「鐵」,'電器」。然後,我希望能夠獲得電子產品清單等等。

我們有我們的業務實體,我們指定項目是可過濾的,可搜索的,用戶可以看到與否以及其他類似行爲。在用戶界面中,我們有相應的顯示每個列表的屏幕。

我想提出一個通用的設計和方法,我可以將這種特性應用到我的對象的屬性。就目前而言,我可以在腦海想到「屬性」和「反思」來達到此目的,但想知道是否有已知的模式可以幫助我們以更好的方式實現這一目標。

感謝 瑪尼

+0

看起來更像是一個枚舉而不是類 – MBen 2011-06-09 17:50:17

+0

我在數據庫中使用CategoryType和Category來引用CategoryType。 – ibram 2011-06-09 17:50:57

回答

0

此圖案可能爲Query pattern。假設你有Select()方法,其條件參數爲「Electronic」,它返回請求項目的列表。

Item[] HouseHoldItems.Select(string criteria); 

因爲你需要實現這個方法。

0

這應該讓你在正確的方向前進:

public enum Category { Electronic, ClothBased, // etc. } 

abstract class HouseholdItem { 
    private readonly Category category; 
    public Category Category { get; } 
    public HouseholdItem(Category category) { 
     this.category = category; 
    } 
} 

class Television : HouseholdItem { 
    public Television() : base(Category.Electronic) { } 
} 

你甚至可以讓Categoryclass,如果你需要。

+2

所有枚舉準則都告訴我們,如果這組值可能會改變,就不要使用枚舉。我會假設情況就是這樣 – Dyppl 2011-06-09 17:55:02

+0

@Dyppl:「如果需要的話,你甚至可以把'Category'變成'class'。」 – jason 2011-06-09 19:09:51

0

請勿爲此使用屬性。屬性不應該用於某些業務邏輯,它是機制的一部分。

如果我理解正確,這裏有什麼是經典many-to-many項目和「類別」之間的關係。有很多方法來表示這種關係。

如果您要將數據存儲在關係數據庫中,那麼最自然的方法是引入一個對象,將一個項目與一個類別鏈接在一起。很少有這樣的物品可能存在於每件物品中。這就是關係數據庫中呈現多對多關係的方式。

如果您只需要在運行時存儲此關係,則可以將類別列表作爲Item類的字段和類別中的項目列表添加爲類別類的字段。確保它們在任何時候都是同步的,並且它應該足夠了。很容易獲得你需要的信息。

因此,關鍵是要創建一個類CategoryTag併爲每個類別創建一個實例,例如「electric」和「clothbased」,然後將兩個鏈接在一起 - 要麼通過直接鏈接雙方或通過「關係」對象。

相關問題