会选择这 3 种方法中的哪一种?为什么?
// This is the one I would choose
class Car {
}
class FeeCalculator {
public double calculateFee(Car car) {
return 0;
}
}
<小时/>
//在这种情况下,问题可能出在我们使用 ORM 框架并尝试使用参数 Car 调用 save 时
class Car {
private FeeCalculator calculator;
public double calculateFee() {
return calculator.calculateFee(this);
}
}
class FeeCalculator {
public double calculateFee(Car car) {
return 0;
}
}
<小时/>
//这样的话上面提到的问题就解决了,但是我不喜欢这个设计
class Car {
public double calculateFee(FeeCalculator calculator) {
return calculator.calculateFee(this);
}
}
class FeeCalculator {
public double calculateFee(Car car) {
return 0;
}
}
最佳答案
我投票给第一个。这种计算器不是汽车的一部分,汽车通常没有计算费用的能力。
第二个设计模型类似于car-has-a-calculator,第三个选项接近car-is-a-calculator(尽管它委托(delegate)了计算到另一个类)。
<小时/>此外,ORM 框架不应该影响模型的架构。该模型应该反射(reflect)“现实世界”,有足够的专家可以在任何 ORM 框架中实现该模型。
关于java - 选择哪种设计? - 优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3008392/