Eag*_*ger 4 java oop design-patterns single-responsibility-principle
我最近被分配到一个公共方法中设计一个包含业务逻辑的类
class MyClass
private BusinessObject object;
public BigInteger calculateCost() {
//do calcualation using properties of object
}
}
Run Code Online (Sandbox Code Playgroud)
在方法calculateCost()中完成的计算完全没问题,但是对象的其他属性可以改变计算的方式.所以基于某些条件我应该可以应用折扣,有多个条件,每个都可以改变计算完成.
所以我通过创建如下的私有方法来应用这种简单的方法
private calculateCost1() {
//using object's properties calculate the cost
}
private calcualteCost2() {
//using object's properties calculate the cost
}
Run Code Online (Sandbox Code Playgroud)
并从公共方法中调用这些方法
public BigInteger calculateCost() {
//do calcualation using properties of object
calculateCost1();
calculateCost2();
}
Run Code Online (Sandbox Code Playgroud)
这种设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改MyClass,但我得到的反馈是它不遵循单一责任原则.我认为班级的唯一责任是计算成本,并且在添加额外的方法来根据业务对象的属性计算成本的方式不同之后,它仍然坚持SRP.
任何人都可以评论为什么这个设计不遵循SRP,如果它不是真的?