遵守下列類和它們的包容:你會如何抽象這個功能?
Section
有ItemList
其中有許多Item
小號
但是讓我們說,一個Item
是基於是基於關閉Section.name
是一些複雜的算法來呈現不同的顏色包含在內。
抽象此功能的最佳方式是什麼?在這種情況下是否會出現常見的設計模式?或者是固有設計有缺陷?
遵守下列類和它們的包容:你會如何抽象這個功能?
Section
有ItemList
其中有許多Item
小號
但是讓我們說,一個Item
是基於是基於關閉Section.name
是一些複雜的算法來呈現不同的顏色包含在內。
抽象此功能的最佳方式是什麼?在這種情況下是否會出現常見的設計模式?或者是固有設計有缺陷?
你應該將你的數據結構/模型從你的邏輯和它們的處理中分離出來。也就是說,我會讓你的物品有一個Section
的引用,它引用Section
,當你將Item
添加到ItemList
時,確保add方法查看ItemList
的s (父),並在Item
上設置引用。 Section
中的ItemList
的設置者也是如此,它必須迭代每個Item
並設置Section
。
或者,您可以將ItemList
的獲取器上的Section
設置爲惰性語義,這完全取決於您的使用,取決於您的使用Section
性能統計在這兩種方法之間會有所不同。
此外,我會寫一些形式渲染奪走了Item
並知道如何使其這將看Section
的Item
和上Section
的Name
。
您可能想渲染整個部分,但我會將渲染器分開編寫,並使用ItemRenderer
來渲染每個Item
。
順便說一句,你可能需要使用的IObservableCollection
一種形式,有Item
實施INotifyPropertyChanged
,以及讓你可以再維持兩所呈現的版本和項目之間的同步,並同步Item
有它存在的Section
通過適當更新Section
屬性的事件註冊。
什麼是渲染?如果是Section
或其中之外的東西,但是從Section
訪問Item
,那麼就沒有什麼需要了。
如果是在Item
,那麼你只需要確保Item
知道它是屬於什麼Section
,或能獲得由具有ID就可以查找它(例如 - 有用以使處理棘手的循環引用語言,但不是毫無必要的麻煩)。
由於第一種情況不會造成困難,因此顯然優先於第二種情況,所以最接近設計模式的是,如果您發現自己在包含的項目中執行此類工作,嘗試移動它直至集裝箱,或者全部在集裝箱外。除此之外,需要解決的問題並不多。
我會構建一個知道算法的ItemRenderer
類,並將參考傳遞給您想呈現的每個Item
以及它所包含的Section
。
讓每個Item
知道它屬於的部分也是有意義的,但我仍然會讓ItemRenderer
處理渲染。