在c#中的不同命名空间中使用具有相同名称的类是个好主意吗?

时间:2010-09-14 08:51:05

标签: namespace-organisation

例如,我们有两个用于解析简历的类,一个用于解析Excel,另一个用于解析HTML。我的同事喜欢做的是将这两个类命名为相同的名称并将它们放入不同的命名空间中,如图所示如下:

namespace XX.ResumeParsers.Excel
class ResumeParser{}

namespace XX.ResumeParsers.Html
class ResumeParser{}

我觉得这不是一个好主意,我宁愿重命名这些类,并将它们放入一个命名空间(但如果需要,可以放在不同的文件中):

//in Excel folder under ResumeParsers folder
namespace XX.ResumeParsers
class ExcelResumeParser{}

//in Html folder under ResumeParsers folder
namespace XX.ResumeParsers
class HtmlResumeParser{}

因此,Hierarchy仍然存在于文件夹中,但命名空间是相同的(与文件夹层次结构完全不匹配),是吗?

如果我是对的,任何想法如何说服我的同事?或者他们的解决方案有任何明显的缺点吗?

感谢。

5 个答案:

答案 0 :(得分:8)

这通常不是一个好主意,不是 - 特别是如果你需要使用相同代码中的两个类。它们是否应该位于不同的命名空间中是一个单独的决定,但我绝对称它们为HtmlResumeParserExcelResumeParser,而不是试图使命名空间与上下文通信。这将使您在阅读代码时更准确地确定您正在谈论的内容。

答案 1 :(得分:3)

我可以从经验中看出 - 在涉及类似示例的大型代码库上工作 - 第二个选项在可读性方面要好得多。在我的情况下,我希望得到一个程序员,他选择以相反的方式做到这一点:)。

一般来说,对于编写代码的人来说,总是清楚使用哪个类以及为什么 - 但是考虑一下人们阅读它 - 他们是否能够一眼就看出代码中使用了哪个解析器?

还有一种情况,当你需要同一个方法中的两个类时 - Jon已经提到过 - 你会遇到冲突然后需要使用完整的命名空间 - 这很痛苦。即使你知道你没有 - 未来的其他人可能需要。并且可能也希望得到你的支持:)。

答案 2 :(得分:1)

这里没有任何绝对的对错,但在同一名称空间中放置类似的类似乎是个好主意。

您可以在框架中查看StreamReaderStringReader作为类似示例。它们都使用相同的接口(TextReader),并且都在System.IO命名空间中,尽管StringReader类没有执行任何实际的I / O,因为它从字符串中读取存储器中。

无论是否将类放在同一名称空间中,都应该尝试使类名称唯一。如果您在同一个文件中同时需要这两个类,那么必须始终指定完整的命名空间是一件麻烦事。

答案 3 :(得分:1)

我认为如果任何给定的代码将使用其中一个而不是两个,并且如果这两个代码在单独的程序集中实现,则可能是正常的。如果他们在同一个程序集中,或者如果一个类想要同时使用它们,那么我更喜欢不同的类名。

答案 4 :(得分:0)

如果解析器有一个基本接口和一些特定的辅助类,但只使用基本接口,则最好使用第一个解决方案(不同的命名空间)。这是因为:

  • 可以分为不同的 议会
  • 每个解析器都是独立的 来自其他