2

描述: 人们总是告诉我,人们总是检查你的所有参数,这会导致大量的 if 检查和 try catch。

问题: 在下面的代码中,我清理了代码,以便处理异常处理的唯一方法位于公开公开的根方法中,而不是在重构的私有辅助方法中。这种做法好吗?

我没有处理更接近它们可能发生的方法的异常,但代码更清晰。

代码注释:

  • 方法 validateInputs() 不包括在内。
  • ParameterObject a 派生自通过“someCode”创建的参数,它代表我想要传递的参数。每当我需要超过 2 个参数时,我都会将这些参数重构为参数对象。

代码:

public class UnderTest {

    public UnderTest() {}

    public boolean runWork(  String someValue ) throws CustomException
    {
        try
        {
            validateInputs();
            // someCode
            .
            .
            processWork(  ParameterObject a );
        }
        catch( Exception e )
        {
            logError(e);
        }
    }

    private void processWork( ParameterObject a  )
    {
        Operation1( ParameterObject a  );
        Operation2( ParameterObject a  );
    }

    private void Operation1( ParameterObject a  )
    {
        // someCode
    }

    private void Operation2( ParameterObject a  )
    {
        // someCode
    }

    private void logError(Exception e)
    {    
        throw new CustomException(e,"Message");
    }        
}
4

2 回答 2

1

我会选择两者兼而有之。验证输入总是一个好主意,像Apache commons-lang Validate类这样的库可以使这更容易。一般来说,不正确的参数应该会导致运行时异常(通常是IllegalArgumentExceptionor NullPointerException)。您对私有方法进行输入验证的深度取决于您的喜好。请记住,越早发现无效参数,错误消息就越有帮助。

当然,这假设您很好地记录了面向公众的 API(理想情况下也是您的内部方法)。明确什么对您的输入有效。

于 2012-07-30T13:04:15.083 回答
1

当他们通过一些公共 API 进入课程时,我倾向于检查参数。在私有方法中,我只通过断言检查或根本不检查。这意味着我更信任自己的班级。

于 2012-07-30T13:21:10.147 回答