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仍然存在于文件夹中,但命名空间是相同的(与文件夹层次结构完全不匹配),是吗?
如果我是对的,任何想法如何说服我的同事?或者他们的解决方案有任何明显的缺点吗?
感谢。
答案 0 :(得分:8)
这通常不是一个好主意,不是 - 特别是如果你需要使用相同代码中的两个类。它们是否应该位于不同的命名空间中是一个单独的决定,但我绝对称它们为HtmlResumeParser
和ExcelResumeParser
,而不是试图使命名空间与上下文通信。这将使您在阅读代码时更准确地确定您正在谈论的内容。
答案 1 :(得分:3)
我可以从经验中看出 - 在涉及类似示例的大型代码库上工作 - 第二个选项在可读性方面要好得多。在我的情况下,我希望得到一个程序员,他选择以相反的方式做到这一点:)。
一般来说,对于编写代码的人来说,总是清楚使用哪个类以及为什么 - 但是考虑一下人们阅读它 - 他们是否能够一眼就看出代码中使用了哪个解析器?
还有一种情况,当你需要同一个方法中的两个类时 - Jon已经提到过 - 你会遇到冲突然后需要使用完整的命名空间 - 这很痛苦。即使你知道你没有 - 未来的其他人可能需要。并且可能也希望得到你的支持:)。
答案 2 :(得分:1)
这里没有任何绝对的对错,但在同一名称空间中放置类似的类似乎是个好主意。
您可以在框架中查看StreamReader
和StringReader
作为类似示例。它们都使用相同的接口(TextReader
),并且都在System.IO
命名空间中,尽管StringReader
类没有执行任何实际的I / O,因为它从字符串中读取存储器中。
无论是否将类放在同一名称空间中,都应该尝试使类名称唯一。如果您在同一个文件中同时需要这两个类,那么必须始终指定完整的命名空间是一件麻烦事。
答案 3 :(得分:1)
我认为如果任何给定的代码将使用其中一个而不是两个,并且如果这两个代码在单独的程序集中实现,则可能是正常的。如果他们在同一个程序集中,或者如果一个类想要同时使用它们,那么我更喜欢不同的类名。
答案 4 :(得分:0)
如果解析器有一个基本接口和一些特定的辅助类,但只使用基本接口,则最好使用第一个解决方案(不同的命名空间)。这是因为: