最佳实践:使用外部库中的冗余方法

时间:2014-01-20 22:47:51

标签: c# dry

在我正在处理的代码库中有几个

的例子
if (!Directory.Exists(dir))
{
    Directory.CreateDirectory(dir);
}

根据MSDN文档(http://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx),这是多余的,因为createDirectory不会覆盖现有目录。

这可以看作是使代码更清晰,因为.CreateDirectory(dir)方法并不明显这是行为。

另一方面,这是代码膨胀并保持它(甚至将其添加到库/实用程序类)有它的问题(例如,你必须阅读/维护更多行代码)。

这里最佳做法是什么?

3 个答案:

答案 0 :(得分:2)

这可能看起来多余,但我可以看到有人决定采用这种方式的原因。

主要区别在于:

  • Directory.Exists()仅返回bool
  • Directory.CreateDirectory()返回DirectoryInfo

因此,即使目录存在,也会执行额外的工作来获取DirectoryInfo实例,这可能根本不需要。

另一件事是,您必须知道Directory.CreateDirectory如果存在则不会覆盖该目录!即使有人不知道他可以很容易地弄清楚这段代码发生了什么,还可以拨打Directory.Exists电话。

我不认为这里有best practice

答案 1 :(得分:2)

就个人而言,我通常会删除冗余代码。

  

这可以看作是使代码更清晰,因为从.CreateDirectory(dir)方法来看,这是行为。

一般来说,我认为评论会更好,而不是冗余的代码路径。添加额外的代码以避免缺乏知识似乎是包含检查的一个弱理由。

话虽如此,在避免调用CreateDirectory时可能会有很小的性能(非常小的),因为该方法将构造一个DirectoryInfo实例。在实践中,这很可能是“噪音”(因为IO调用往往相对来说相对昂贵),所以除非它被证明是一个测量问题,否则我不会将其考虑在内。

答案 2 :(得分:0)

即使初步检查已通过,竞争条件也可能导致目录创建失败。 因此我认为这段代码不正确,我劝阻你不要使用它。

相关问题