2012-08-29 36 views
2

遵守下列類和它們的包容:你會如何抽象這個功能?

SectionItemList其中有許多Item小號

但是讓我們說,一個Item是基於是基於關閉Section.name是一些複雜的算法來呈現不同的顏色包含在內。

抽象此功能的最佳方式是什麼?在這種情況下是否會出現常見的設計模式?或者是固有設計有缺陷?

回答

1

你應該將你的數據結構/模型從你的邏輯和它們的處理中分離出來。也就是說,我會讓你的物品有一個Section的引用,它引用Section,當你將Item添加到ItemList時,確保add方法查看ItemList的s (父),並在Item上設置引用。 Section中的ItemList的設置者也是如此,它必須迭代每個Item並設置Section

或者,您可以將ItemList的獲取器上的Section設置爲惰性語義,這完全取決於您的使用,取決於您的使用Section性能統計在這兩種方法之間會有所不同。

此外,我會寫一些形式渲染奪走了Item並知道如何使其這將看SectionItem和上SectionName

您可能想渲染整個部分,但我會將渲染器分開編寫,並使用ItemRenderer來渲染每個Item

順便說一句,你可能需要使用的IObservableCollection一種形式,有Item實施INotifyPropertyChanged,以及讓你可以再維持兩所呈現的版本和項目之間的同步,並同步Item有它存在的Section通過適當更新Section屬性的事件註冊。

0

什麼是渲染?如果是Section或其中之外的東西,但是從Section訪問Item,那麼就沒有什麼需要了。

如果是在Item,那麼你只需要確保Item知道它是屬於什麼Section,或能獲得由具有ID就可以查找它(例如 - 有用以使處理棘手的循環引用語言,但不是毫無必要的麻煩)。

由於第一種情況不會造成困難,因此顯然優先於第二種情況,所以最接近設計模式的是,如果您發現自己在包含的項目中執行此類工作,嘗試移動它直至集裝箱,或者全部在集裝箱外。除此之外,需要解決的問題並不多。

0

我會構建一個知道算法的ItemRenderer類,並將參考傳遞給您想呈現的每個Item以及它所包含的Section

讓每個Item知道它屬於的部分也是有意義的,但我仍然會讓ItemRenderer處理渲染。