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,如果它不是真的?
沒有進一步的信息,我認爲它堅持SRP –
你是否也負責設計'BusinessObject'類,或者它是否被給予? – Calculator
或者你在那裏做,或者在其他類中,並從計算成本中調用這些類。無論哪種方式,最終值都需要在返回之前進行更改。 – efekctive