2017-02-14 60 views
3

我最近分配給設計其中包含在一個單一的公共方法這個班是否遵循單一責任原則?

class MyClass 
     private BusinessObject object; 
     public BigInteger calculateCost() { 
       //do calcualation using properties of object 
     } 
} 

計算在方法calculateCost()完成業務邏輯的類是完全沒有問題然而存在可以改變計算的方式是對象的其他屬性完成。 所以基於一些條件,我應該可以應用折扣,有多個條件可以改變計算完成。

所以我申請了簡單的方法,通過創建私有方法,如下面

 private calculateCost1() { 
      //using object's properties calculate the cost 
    } 

    private calcualteCost2() { 
      //using object's properties calculate the cost 
    } 

並號召公衆方法,這些方法

 public BigInteger calculateCost() { 
       //do calcualation using properties of object 
       calculateCost1(); 
       calculateCost2(); 
     } 

這種設計的缺點是,如果我需要添加額外的計算方法,我將不得不改變MyClass,但我得到的反饋是它沒有遵循單一責任原則。我相信班級的單一職責是計算成本,並且在添加額外方法以基於業務對象屬性的不同方式計算成本後,它仍然遵循SRP。

任何人都可以請評論爲什麼這個設計沒有遵循SRP,如果它不是真的?

+0

沒有進一步的信息,我認爲它堅持SRP –

+0

你是否也負責設計'BusinessObject'類,或者它是否被給予? – Calculator

+0

或者你在那裏做,或者在其他類中,並從計算成本中調用這些類。無論哪種方式,最終值都需要在返回之前進行更改。 – efekctive

回答

4

我得到了它不遵循單一職責原則

你的類是繼單一職責原則因爲在類的所有方法都calcualting成本的一個目標的反饋。

你的班級不是adheering的是開放原則。每次需要引入新的計算機制時,都需要修改班級。 開放封閉原則指出類應該開放以擴展但不適合修改。您可以堅持使用OCP的其中一種方法是使用Strategy Pattern,其中每種計算類型都有一個類別。