2012-10-19 25 views
0

我对某些事情有点困惑,如果大家都能对此有所澄清,我将不胜感激。我有一个班级支付有一些方法和getter/setter。 例如,我是否使用ItemCost方法返回属性itemCost的阀门,还是使用getter?在Java中为方法选择合适的名称

public class Payment { 
    private int itemCost, totalCost; 

    public int itemCost(int itemQuantity, int itemPrice){ 
     itemCost = itemPrice * itemQuantity; 
     return itemCost; 
    } 

    public int totalCost(BigDecimal itemPrice){ 
     totalCost = totalCost + itemCost; 
     return totalCost; 
    } 

    public int getBalance(int clickValue, int totalCost){ 

     totalCost = totalCost - clickValue; 
     return totalCost; 
    } 

    public int getTotalcost(){ 
     return this.totalCost; 
    }  

    public void setTotalcost(int totalCost){ 
     this.totalCost = totalCost; 
    } 

    public int getItemcost(){ 
     return this.itemCost; 
    }  

    public void setItemcost(int itemCost){ 
     this.itemCost = itemCost; 
    } 
} 

确定,所以代替实例:在另一类

DO INT成本= payment.itemCost(数量,ITEMPRICE):payment.itemCost(数量,ITEMPRICE) payment.getItemcost

编辑2:会使所有的方法返回无效,只是使用getters更好的编码?

public class Payment { 
    private int itemCost, totalCost; 

    public void calculateItemcost(int itemQuantity, int itemPrice){ 
     itemCost = itemPrice * itemQuantity; 
    } 

    public void calculateTotalCost(BigDecimal itemPrice){ 
     this.totalCost = totalCost + itemCost; 
    } 

    public void calculateBalance(int clickValue, int totalCost){ 
     this.totalCost = totalCost - clickValue; 
    } 

    public int getTotalcost(){ 
     return this.totalCost; 
    }  

    public void setTotalcost(int totalCost){ 
     this.totalCost = totalCost; 
    } 

    public int getItemcost(){ 
     return this.itemCost; 
    }  

    public void setItemcost(int itemCost){ 
     this.itemCost = itemCost; 
    } 
} 
+1

这些方法签名(名称+参数类型+返回类型)都很差。例如,'itemCost(itemQuantity,itemPrice)'的签名根本没有说明它修改了'itemCost'。而'totalCost'甚至没有使用它的论点! – ruakh

+0

@Adesh。是的,这将是一个比较好的方法..但是你应该把你的业务逻辑部分从这个类中移出来。然后从其他地方计算你的itemCost和totalCost,并调用'setters'来设置这个类的值。 –

回答

0

一般情况下,它应该是possible了解你的方法应该是从你的方法的名称只是做。

所以,只有当你想要返回或设置类的属性,您应该使用getterssetters。这样你的代码看起来更具可读性,methodsthe name清楚地说明它会做什么。但是,如果你的方法没有返回确切的属性,而是返回一些计算的结果,那么你应该相应地命名你的方法。

对于E.g: -如果你的方法返回cost作为类的某些属性的计算,然后名称方法calculateCost。它更有意义。

PS: - 记住,你的代码将我保持更多数量的时间,比你把它打造。 Code为别人理解,不为yourself理解。

+0

好的,所以而不是int cost = payment.itemCost(quantity,itemPrice) – Adesh

+0

@Adesh ..对于该方法,您应该使用: - calculateItemCost(),因为该方法没有返回类的属性,但它正在根据输入参数计算项目成本.. –

+0

@Adarsh ..您应该非常小心,为您的方法选择适当的名称。永远不要忽视它。这是实现良好编码习惯的第一步。 –

2

getter/setters是为了将值设置为对象中的特定属性并从对象中获取相同属性,这样您可以将属性定义为私有并强制封装(OO原则之一)。

当你正在做任何计算(或)业务逻辑时,最好使用合适的操作名称来代替get/set。

编辑:

正如尼尔评论说,它总是提出要离开POJO一样简单豆,而不是在业务逻辑/计算馅。你可能有另一个具有业务逻辑的类,并使用get/setter在计算时从POJO获取值。

+2

Up投票简单解释!@Adesh :你可以在你的处理器(业务处理器)中进行计算,而不是向该类中添加方法来执行计算。通常,bean是一个简单的POJO,只包含属性的getter/setter方法。 –

+0

@ neel.1708:这非常有效,bean一般设计成简单的POJO。 – kosa

0

现在你有2种方法可以设置itemCost

public void setItemcost(int itemCost){ 
    this.itemCost = itemCost; 
} 

public int itemCost(int itemQuantity, int itemPrice){ 
    itemCost = itemPrice * itemQuantity; 
    return itemCost; 
} 

理想情况下,你将有一个设置方法,但如果你希望类工作,这样我会建议让这两种方法都返回void,并使用getItemCost来获取值。