2012-09-03 31 views
0

我正在和一些同事一起在網站上工作,我們在如何看待班級架構方面存在一些差異,所以我也發佈了這個帖子,看看大型社區對這個問題的看法如何,因爲我認爲很多人都是在類似的情況下。採取什麼樣的方法與類和類架構?

我們正在使用通過活動記錄模式實現模型的MVC方法。其中一個模型是與我們的數據庫中的產品表相關的「產品」模型。 事情是,我們有兩種主要類型的產品 - 有形(類型= 1)和非有形(類型= 2)。在整個代碼中,我們將擁有大量與此類產品相關的邏輯。 (如果有形做到這一點,如果沒有,那麼...)

所以一種方法是 - 創建類有形產品和非有形產品,並通過工廠獲取一個或另一個。當然,這些類將會有重複的方法,即在兩個類中都會存在isTangible()或isNonTangible(),但在一種情況下會返回true,而在另一種情況下會返回false。 (這只是一個例子)。 我期待在類中看到至少約30種不同的方法,這些方法將根據產品類型返回不同的值。

另一種方法是隻有一個Product類,並且在每個方法中實現IF塊,並且在產品是有形的或無形的並返回結果時執行邏輯。

我知道這是一個模糊的問題,但我認爲最誰是在面向對象的環境中工作的人不得不在某些時候類似的情況......

你看到在選擇任何長期後果一種方法比另一種方法更好或更差嗎?

編輯: 對不起,我可能不太清楚。這兩個類將擴展Product類。 (即「類TangibleProduct擴展產品」和「類NonTangibleProduct擴展產品」)

感謝名單

回答

2

架構上來講,因爲有形和無形產品之間的區別是在你的領域很基本的最好的辦法是有單獨的類TangibleProductIntangibleProduct,並作爲實施IProduct(第一種方法的變體)的實例處理。如果你的ORM工具允許你做到這一點,那就很好。

第二種方法應該很難避免。

0

很難說,沒有獲得您的全部要求。

這主要取決於是否會有任何不平凡的方法

  1. 其表現非常不同的有形和無形產品。
  2. 只有在有形或無形產品的情況下才有意義。

當你最終創造了很多這像這樣的方法:

public void doSomething() 
    if (isTangible) { 
     [...loads of code...] 
    } 
    else { 
     [...loads of different code...] 
    } 
} 

你會用不同的類更好。

1

OO通常建議在類層次結構中進行這種區分。

如果使用工廠方法創建正確的子類,則只能在創建時執行一次條件邏輯,而不是在行爲變化的每個方法中執行一次。

您還可以更輕鬆地添加新類型。如果決策邏輯在許多方法中重複出現,則必須全部更改它們。如果它在一個工廠中被整合,你只需要在那裏添加一個分支並實現新的子類,並且所有現有的子類可以經常不受影響。

相關問題