2014-02-28 64 views
0

我工作的以下情形的多個對象適當的設計:對返回類似的數據

  • 的視角有幾個標籤。每個選項卡由一個單獨的類 表示幷包含一個數據網格。

  • 這些標籤可以分別返回用戶選擇的一組項目。 這些項目非常相似,但每個項目都有一個或兩個特定於其的 屬性。

  • 的視圖演示有一個方法叫SendItems這理應得到當前活動標籤的 項目,並調用相應的後端 服務方法(根據不同藏品的一種方法)。

什麼是適當的設計在這裏?我想到的兩種方法至今:

  • 由於項目非常相似,我在理論上組中的所有 屬性爲1項類,然後我可以抽象整件事 出具有一種稱爲GetItems()將返回 集合。然後我可以使用選項卡類型上的代理字典 調用右後端方法。

  • 我可以讓所有選項卡來自基本選項卡,將 選項卡列表存儲在Presenter中並保留當前選項卡。在SendItems上,使 幾個條件(每個類型一個(如果CurrentTab is TabA => MethodA(), 等)),然後向下採樣以檢索正確的數據。最後,請撥打 適當的後端方法。

我沒有找到任何解決方案的吸引力(組單獨的屬性變成一個類/向下轉換),並希望有解決此類問題的標準方式。

回答

0

我相信你的話,我將主要去與選項2

  1. 創建一個父類的標籤,讓您的其他選項卡,從它派生。
  2. 爲所有包含所有共享屬性的項目創建一個父類。每個選項卡的特定項目類型可以從父類派生以定義其額外屬性
  3. 在父項選項卡中,保留所選項目的列表。該列表應該是一個List。子類可以獲取此集合中的項目,並依靠運行時轉換來獲取更具體的類型。在你的情況下,演員陣容基本上是一個noop(取決於你如何做),所以沒有任何性能問題。
  4. 在父選項卡,使SendItems方法抽象所以每個孩子標籤必須實現它自己

這是接近你的第二個選項上,除了考慮的多一點多態性魔術的優勢,避免您的SendItems中的條件 - 如果您有這樣的條件,只需將邏輯卸載到子類。