4.2 保持方法短小
保持方法短小是编写整洁易读的代码的重要手段。在C#的世界中,最好将方法长度控制在10行之内,而最佳长度是在4行之内。保持方法短小的一个好方法是考虑应当捕获错误还是令错误沿调用栈向上传播。因为防御性编程方法可能会由于防御过度而增加代码编写量,此外捕获错误的方法与不捕获错误的方法相比也会更长。
请看如下范例,本例代码将抛出ArgumentNullException
。
上述代码中有两处代码会抛出ArgumentNullException
。第一处可能抛出Argument-NullException
的代码是nameTextBox.Text = _dataItem.Name;
;第二处是DescriptionTextBox.Text = _dataItem.Description;
。在异常发生时异常处理将捕获该异常,将其内容输出至控制台,随后仍然向调用栈抛出异常。
请注意从阅读的角度上,try/catch
块总共有8行代码。
当然,使用自定义的参数验证器完全可以用一行代码替代try/catch
异常处理。以下范例展示了这种做法[1]:
其中ArgumentValidator
类的目的在参数值为null
时抛出包含方法名称信息的ArgumentNullException
:
在定义好null
验证类之后,就可以在方法中使用这种新的方式进行null
参数验证了。其代码如下:
上述代码将一整块try catch
代码块替换为方法起始处的一行代码。当参数为null
时,验证方法就会抛出ArgumentNullException
,阻止代码继续执行。这种方式令代码更易读,调试起来也更容易。
除此之外,正确的缩进也能够使代码更加易读。接下来将介绍这部分内容。
[1]本例中的ValidatedNotNullAttribute
对参数验证实质上起不到任何作用。大家在实践中请一定注意。在一些AOP或者其他动态框架的支持下才能通过特性达到参数验证的目的。——译者注