簡體   English   中英

對返回相似數據的多個對象進行適當的設計

[英]Appropriate design for multiple objects that return similar data

我正在處理以下情況:

  • 視圖有幾個選項卡。 每個選項卡由一個單獨的類表示,並包含一個數據網格。

  • 每個選項卡都可以返回用戶選擇的項目集。 這些項目非常相似,但是每個項目都有一個或兩個特定於它的附加屬性。

  • View Presenter有一個名為SendItems的方法,該方法應從當前活動選項卡中獲取項目並調用適當的后端服務方法(每個不同的項目集合一個方法)。

這里合適的設計是什么? 到目前為止,我已經想到了兩種方法:

  • 由於Items非常相似,因此從理論上講,我可以將所有屬性分組到1 Item類中,然后可以通過使用名為GetItems()的方法將整個內容抽象出來,該方法將返回集合。 然后,我可以在選項卡類型上使用委托字典來調用正確的后端方法。

  • 我可以讓所有標簽都來自基本標簽,將標簽列表存儲在Presenter中並按住Current標簽。 在SendItems上,設置幾個條件(每種類型一個(如果CurrentTab is TabA => MethodA()等)。)然后向下轉換以檢索正確的數據。 最后,調用適當的后端方法。

我認為這兩種解決方案都沒有吸引力(將單獨的屬性分組為一個類/向下轉換),並希望有一種解決此類問題的標准方法。

我相信在您的情況下,我主要會選擇選項2。

  1. 創建一個父選項卡類,並使其他選項卡派生自它。
  2. 為所有具有所有共享屬性的項目創建一個父類。 每個選項卡的特定項類型可以從父類派生,以定義其額外屬性
  3. 在父選項卡中,保留所選項目的列表。 該列表應該是一個列表。 子類可以獲取此集合中的項目,並依靠運行時強制轉換來獲取更多特定類型。 在您的情況下,強制轉換基本上不會發生(取決於您的操作方式),因此實際上並沒有任何性能問題。
  4. 在父選項卡上,使SendItems方法成為抽象,以便每個子選項卡都必須自己實現

這與上面的第二個選項非常接近,除了利用更多的多態性魔術並避免在SendItems中使用條件-如果您具有這樣的條件,只需將邏輯卸載到子類中即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM