这段代码运行良好,但是它太长了,看起来太糟糕了。我尝试过格式化它,但是它都设置了数据,所以我不知道如何使它更好。
这是一堂课:
private static BrandProfitAndLoss getAllRateComparisonRecords(BrandProfitAndLoss brandProfitAndLoss , BrandProfitAndLoss brandProfitAndLossComp){
BrandProfitAndLoss result = new BrandProfitAndLoss();
result.setDate(brandProfitAndLossComp.getDate());
result.setOrder_item_num_comp(compareData(brandProfitAndLoss.getOrder_item_num(), brandProfitAndLossComp.getOrder_item_num()));
result.setOrder_count_comp(compareData(brandProfitAndLoss.getOrder_count(), brandProfitAndLossComp.getOrder_count()));
result.setOrder_price_comp(compareData(brandProfitAndLoss.getOrder_price(), brandProfitAndLossComp.getOrder_price()));
result.setOrder_amount_comp(compareData(brandProfitAndLoss.getOrder_amount(), brandProfitAndLossComp.getOrder_amount()));
result.setOrder_gross_comp(compareData(brandProfitAndLoss.getOrder_gross(), brandProfitAndLossComp.getOrder_gross()));
result.setOrder_wholesale_price_comp(compareData(brandProfitAndLoss.getOrder_wholesale_price(), brandProfitAndLossComp.getOrder_wholesale_price()));
result.setDelivery_count_comp(compareData(brandProfitAndLoss.getDelivery_count(), brandProfitAndLossComp.getDelivery_count()));
result.setDelivery_price_comp(compareData(brandProfitAndLoss.getDelivery_price(), brandProfitAndLossComp.getDelivery_price()));
result.setDelivery_item_num_comp(compareData(brandProfitAndLoss.getDelivery_item_num(), brandProfitAndLossComp.getDelivery_item_num()));
result.setDelivery_gross_comp(compareData(brandProfitAndLoss.getDelivery_gross(), brandProfitAndLossComp.getDelivery_gross()));
result.setDelivery_amount_comp(compareData(brandProfitAndLoss.getDelivery_amount(), brandProfitAndLossComp.getDelivery_amount()));
result.setApproval_rate_comp(compareData(brandProfitAndLoss.getApproval_rate(), brandProfitAndLossComp.getApproval_rate()));
result.setShipping_comp(compareData(brandProfitAndLoss.getShipping(), brandProfitAndLossComp.getShipping()));
result.setAll_delivery_price_comp(compareData(brandProfitAndLoss.getAll_delivery_price_comp(), brandProfitAndLossComp.getAll_delivery_price_comp()));
result.setReturn_sales_comp(compareData(brandProfitAndLoss.getReturn_sales(), brandProfitAndLossComp.getReturn_sales()));
result.setPoint_discount_comp(compareData(brandProfitAndLoss.getPoint_discount(), brandProfitAndLossComp.getPoint_discount()));
result.setPoint_allowance_comp(compareData(brandProfitAndLoss.getPoint_allowance(), brandProfitAndLossComp.getPoint_allowance()));
result.setSales_amount_comp(compareData(brandProfitAndLoss.getSales_amount(), brandProfitAndLossComp.getSales_amount()));
result.setPurchasing_cost_comp(compareData(brandProfitAndLoss.getPurchasing_cost(), brandProfitAndLossComp.getPurchasing_cost()));
result.setProfit_comp(compareData(brandProfitAndLoss.getProfit(), brandProfitAndLossComp.getProfit()));
result.setProfit_gross_comp(compareData(brandProfitAndLoss.getProfit_gross(), brandProfitAndLossComp.getProfit_gross()));
result.setYfc_cost_comp(compareData(brandProfitAndLoss.getYfc_cost(), brandProfitAndLossComp.getYfc_cost()));
result.setCommission_cost_comp(compareData(brandProfitAndLoss.getCommission_cost(), brandProfitAndLossComp.getCommission_cost()));
result.setServer_cost_comp(compareData(brandProfitAndLoss.getServer_cost(), brandProfitAndLossComp.getServer_cost()));
result.setBrand_cost_comp(compareData(brandProfitAndLoss.getBrand_cost(), brandProfitAndLossComp.getBrand_cost()));
result.setBrand_pol_comp(compareData(brandProfitAndLoss.getBrand_pol(), brandProfitAndLossComp.getBrand_pol()));
result.setCompLastYearRate_comp(compareData(brandProfitAndLoss.getCompLastYearRate(), brandProfitAndLossComp.getCompLastYearRate()));
return result;
}下面是compareDate方法:
private static float compareData(float thisYear, float lastYear) {
float result = 0;
if(thisYear == 0 || lastYear == 0){
return result;
}
return (thisYear / lastYear) - 1;
}发布于 2013-07-02 05:51:52
你能改变BrandProfitAndLoss类吗?如果是这样,请考虑类似于Builder模式的内容。这将带来额外的好处,可能允许您返回的实例是不可变的。
由于brandProfitAndLoss和brandProfitAndLossComp变量的作用域非常小,请考虑使用较短的变量名。它只是增加了每一行,而且你不太可能忘记这个变量,因为你可以同时看到它的整个生命周期。
使result和您的参数成为最终变量。
让您的方法更加一致地命名,您正在使用一些奇怪的组合camelCase和下划线,这是很难阅读和容易混淆。Java通常是camelCased,但是遵守任何标准都比使用混合语言要好。
重命名您的方法:这个类似乎没有“获取所有的比率比较记录”。它似乎产生某种单一的比较记录并返回它。
重命名其他方法:compareData对于该方法所做的事情没有描述性。
关于compareData:如果只使用一次(在result情况下),那么将值存储到变量中是没有意义的。此外,您不应该使用浮点数来存储涉及金钱的数据,因为它不会像您希望的那样工作。Java中有适当的类可以以可预测的方式(例如BigDecimal)处理金钱,您应该尽可能地使用这些类。
我不太清楚你想用这个方法完成什么,所以我不能给出太多的建议。这仅仅是为了显示这些数字中哪个更大?您能在上面的设置中使用某种内联比较吗?也许类(甚至是浮点)支持compareTo (来自比较器接口),这将大大简化这一点。
祝好运!
https://codereview.stackexchange.com/questions/28022
复制相似问题