我正在做一个关于餐厅的项目,这家餐厅有很多产品(食物),我有一个Food Combo类,并且此组合由 1个饮料,1个主菜和2个EXTRAS组成。该类具有很多方法和属性,当仅应返回价格并带来附加价格时,很少有方法可以进行数学运算和验证
public class FoodCombo {
private ArrayList<Product> list = new ArrayList(); //Each Product has his own price
private boolean refill; //Do you want your drink to have refill?
private boolean supersizing; //
private final double COMBO_DISCOUNT = 0.20;
private final double REFILL_PRICE = 300;
private final double SUPERSIZING_PRICE = 300;
public FoodCombo() {
}
public void addProducto(Product product) {
list.add(product);
}
/* This class needs one Main Dish, two Extras, and One Drink to be considered
as a Food Combo*/
public int countMainDishes() //1
public int countExtras(); //2
public int countDrinks() //3
public boolean isItCombo() {
}
; //Use above methods to verify
//Calculate Methods
public double calculateSubPrice();
public double calculatediscount()
public double calculateRefill();
public double calculateSuperSize();
public double calculateTotal();
public String toString();
///我很感谢您的建议:)
}
我正在考虑将此类的责任分为多个类别,因此,我应该创建多少个类来完成编程的良好实践?他们应该怎么做?
答案 0 :(得分:1)
第一件事是:忘记实现。因此,“当应仅返回一个价格并带来其附加价格时,很少有方法可以进行数学运算和验证”。
如果您想知道某个类是否做得太多,请从较高的角度写下该类的用途和作用。然后看看您写的内容,您将能够知道它是否做得太多。查看其责任是否集中。
例如,如果我有一个课程:
“此类负责与NRI G13硬币接收器设备进行接口,提供API以接收硬币,处理错误并报告收到的现金量。”
然后,尽管其实现可能做得很多,但类本身并没有做太多。
或者,如果我有课:
“此类从数据库读取,处理数据,将其发送到另一台服务器,然后将副本发送到浏览器。”
然后,尽管其实现可能是相当基本的(所有这些操作通常都具有从库中调用的一个函数),但该类执行了太多操作,因为它负责实现太多结果。