在命名空间中进行分组而不是为类添加前缀

时间:2009-07-06 13:59:56

标签: architecture naming-conventions namespaces naming prefix

想象一下您有一个需要从不同来源导入数据的应用程序的情况。对于这些来源中的每一个都存在一个单独的模型(通常与其他模型无关)。

因此,假设我的软件组件X执行所有导入,命名空间相应为X.在X中我拥有所有不同的解析器和导入器,因此可能有一个用于txt文件,另一个用于xls文件等。

您更喜欢哪种风格:

X.XlsParser
X.XlsModelObject
X.TxtParser
X.TxtModelObject

VS

X.Xls.Parser
X.Xls.ModelObject
X.Txt.Parser
X.Txt.ModelObject

或者我应该将相应源的模型(2-4个实体)放入子命名空间?

X.XlsParser
X.Xls.ModelObjectA
X.Xls.ModelObjectB
X.TxtParser
X.Txt.ModelObjectA
X.Txt.ModelObjectB

我不想让所有那些不相关的类混淆一个命名空间,但是我也不希望遇到问题,比如找出我的代码引用哪个解析器(必须使用它)。

您如何看待

X.Xls.XlsParser

某种工作加倍。

您遵守哪些命名惯例?

4 个答案:

答案 0 :(得分:2)

就个人而言,我更喜欢第二种风格(例如X.Xls.Parser)。我喜欢将单独的组件尽可能分开。

这还取决于这些组件的相关程度。如果它们密切相关,它们应该在同一名称空间中。

答案 1 :(得分:2)

我会选择你的最后一个选择:

Xls.XlsParser
Csv.CsvParser

这类似于ADO.NET约定

SqlClient.SqlConnection
OracleClient.OracleConnection

这样,您的相关类按命名空间分组,但如果导入2个命名空间,则无需通过在代码中显式添加前缀来区分。

答案 2 :(得分:1)

为此,我可能会

X.Excel.Parser
X.Excel.ModelObject
X.Csv.Parser
X.Csv.ModelObject

也许

X.Core.ParserBase

X.IParser

答案 3 :(得分:0)

我也会投票使用命名空间。这就是它们的用途。

如果您将命令分解为命名空间,Intellisense将更有用。