【发布时间】:2015-12-16 00:16:04
【问题描述】:
我正在阅读 Robert C. Martin 的《清洁代码》一书,他强烈建议“将 try 的主体和 catch 块提取到它们自己的函数中”
为了清楚起见,这是本书的示例:
public void delete(Page page)
{
try
{
deletePageAndAllReferences(page);
}
catch (Exception e)
{
logError(e);
}
}
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
private void logError(Exception e) {
logger.log(e.getMessage());
}
这样做的原因是:
- try/catch 块混淆了代码的结构,并将错误处理与正常处理混为一谈
- 很好的分离,使代码更易于理解和修改。
问题是,我已经为几个项目工作了几年,这从来都不是一个规则,即使在他们真正关心干净代码的环境中,我也没有找到遵循这个规则的人。
所以我想知道: 本书示例基于 Java,我正在使用 C#/.NET,是否有任何来自 Microsoft 或来自 .NET 社区的标准或约定?
【问题讨论】:
-
欢迎来到现实世界;有多少人连“代码完成”中强调的基本事情都做?我记得一个刚从大学毕业的程序员来到一个项目时几乎尖叫,“规格!规格!功能规格在哪里!”随着滚石乐队的歌唱和演奏,你不能总是得到你想要的。
-
有一天有人可能会遇到
deletePageAndAllReferences()并说“谁没有在这里放任何try-catch 的愚蠢的nincompoop?让我添加一个”。然后你最终会在 try-catch 中使用 try-catch 来提高性能 -
这是 java 还是 C# (
throws Exception {)? -
@Rob OP 说示例来自 Java 书
-
呃,有趣的是他说这是因为一个方法应该“做一件事”。但显然提取的方法做了两件不同的事情,删除页面和所有引用。按照他自己的原则应该是两种不同的方法。
标签: java coding-style standards conventions