Java:在方法调用中封装if-return语句以获得更清晰,更简洁的代码?

时间:2015-09-21 06:44:49

标签: java oop coding-style code-cleanup

我正在学习Java以及学习有关代码设计的书籍。

我想知道,在Java中是否有可能在方法调用中封装if语句,如果boolean为false,则允许以某种方式退出父方法?

我想知道的是,如果我可以进一步提炼以下代码

public void addStock (String stock) {

boolean stockNameIsValid = testStringForValidStockName(stock);
    if (stockNameIsValid == false){
        JOptionPane.showMessageDialog(getParent(), "Invalid text entered. Stock ticker names may only include upper-case alphabetical letters.", "Invalid Text Entry Error", JOptionPane.ERROR_MESSAGE);
        return;
    }

boolean stockAlreadyExistsInPanel = testForStockExistenceInListingPanel(stock); 
    if(stockAlreadyExistsInPanel == true){
        JOptionPane.showMessageDialog(getParent(), "The same stock cannot be entered twice into the list of stocks being watched.", "Redundant Stock Error", JOptionPane.ERROR_MESSAGE);
        return;
    }

    controller.addStockToDb(stock);

}

类似

public void addStock(String stock){
    giveErrorAndReturnIfStockNameInvalid(stock);
    giveErrorAndReturnIfStockCannotBeFound(stock);
    controller.addStockToDb(stock);
}

我想知道这样做是否可行,因为我的IDE无法进一步提取上面的代码,并且我的代码以第二种方式形成,我认为会更好地传达意图并拥有更高的级别抽象比起初的例子。

我有这个主意,因为我现在正在阅读鲍勃叔叔的清洁代码"书中,里面说方法最终应该尽可能短。如果我将低级逻辑封装在方法调用中,那么它会使代码反映出更高级别的逻辑。这使得代码更容易理解,因为它需要较少的开发人员的心理资源来获得代码的每个部分所做的一般概念。

我的目标是消除读者实际必须在此处分析代码的实现细节,除非它绝对必要。因此,读者不必阅读整个方法来理解它,而是可以获得更抽象的代码逻辑表示。

2 个答案:

答案 0 :(得分:0)

如果addStock方法的参数是非法的,则这些方法可能抛出非法的参数异常,例如:

public void giveErrorAndReturnIfStockNameInvalid(String stock)
{
    // TODO: Check stock name
    if(stock...)
    {
        throw new IllegalArgumentException("Stock has no valid name:"+stock);
    }
}

注意这个(IllegalArgumentException)是一个未经检查的异常,因此如果未在调用方法中处理,您可能会获得未捕获的运行时异常,另一个选项可能是创建一个新的特定于域的异常,如“InvalidStockException”并对其进行检查,所以任何人使用此方法将被强制添加try-catch块以防万一出错并显示错误消息。

答案 1 :(得分:0)

我们必须使用Exceptions,下面的伪代码解释相同:

server.port = 0