6

例如,我们有两个解析简历的类,一个解析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{}

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

如果我是对的,知道如何说服我的同事吗?或者他们的解决方案有什么明显的缺点?

谢谢。

4

5 回答 5

8

这通常不是一个好主意,不 - 特别是如果您需要使用同一代码中的两个类。它们是否应该在不同的命名空间中是一个单独的决定,但我肯定会调用它们HtmlResumeParserExcelResumeParser而不是试图让命名空间通信上下文。这将使您在阅读代码时更容易准确地确定您在说什么。

于 2010-09-14T08:57:07.460 回答
3

我可以从经验中看出——在涉及类似示例的大型代码库上工作——就可读性而言,第二种选择要好得多。就我而言,我很想抓住选择相反方式的程序员:)。

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

还有一种情况是你需要在同一个方法中使用两个类——Jon 已经提到过——你会遇到冲突并且需要使用完整的命名空间——这很痛苦。即使你知道你不需要——未来的其他人可能需要这样做。并且可能也想抓住你:)。

于 2010-09-14T09:06:12.693 回答
1

这里没有绝对的对与错,但将类似的类放在同一个命名空间中似乎是个好主意。

您可以将StreamReaderandStringReader视为框架中的一个类似示例。TextReader它们都实现了相同的接口System.IOStringReader

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

于 2010-09-14T09:04:44.853 回答
1

我会说如果任何给定的代码将使用其中一个或另一个但不是两者都使用,并且如果两者在单独的程序集中实现,那可能是可以的。如果它们在同一个程序集中,或者如果一个类想要同时使用两者,那么我更喜欢不同的类名。

于 2010-09-14T09:06:18.517 回答
0

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

  • 可以在不同的组件上划分
  • 每个解析器独立于其他
于 2010-09-14T08:56:55.307 回答