这 class 是否遵循单一职责原则?
Is this class following the Single Responsibility Principle?
我最近被指派设计一个 class,它在单个 public 方法中包含业务逻辑
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 方法中调用这些方法
public BigInteger calculateCost() {
//do calcualation using properties of object
calculateCost1();
calculateCost2();
}
这种设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改 MyClass,但我得到的反馈是它不遵循单一职责原则。我相信 class 的唯一职责是计算成本,并且在添加额外的方法以根据业务对象的属性以不同方式计算成本后,它仍然遵守 SRP。
任何人都可以评论为什么这个设计不遵循 SRP 如果它不是真的?
I got the feedback that its not following Single Responsibility Principle
您的class 遵循单一职责原则,因为class 中的所有方法都具有单一的objective 计算成本。
你的class不遵守的是Open-Closed原则。每次需要引入新的计算机制时,都需要修改你的class。 开闭原则指出classes应该对扩展开放但对修改关闭。在您的情况下,您可以遵守 OCP 的一种方法是使用 Strategy Pattern,其中每种计算类型都有一个 class。
我最近被指派设计一个 class,它在单个 public 方法中包含业务逻辑
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 方法中调用这些方法
public BigInteger calculateCost() {
//do calcualation using properties of object
calculateCost1();
calculateCost2();
}
这种设计的缺点是,如果我需要添加额外的计算方法,我将不得不更改 MyClass,但我得到的反馈是它不遵循单一职责原则。我相信 class 的唯一职责是计算成本,并且在添加额外的方法以根据业务对象的属性以不同方式计算成本后,它仍然遵守 SRP。
任何人都可以评论为什么这个设计不遵循 SRP 如果它不是真的?
I got the feedback that its not following Single Responsibility Principle
您的class 遵循单一职责原则,因为class 中的所有方法都具有单一的objective 计算成本。
你的class不遵守的是Open-Closed原则。每次需要引入新的计算机制时,都需要修改你的class。 开闭原则指出classes应该对扩展开放但对修改关闭。在您的情况下,您可以遵守 OCP 的一种方法是使用 Strategy Pattern,其中每种计算类型都有一个 class。