【问题标题】:Domain Model Namespace naming conventions域模型命名空间命名约定
【发布时间】:2011-01-12 16:12:28
【问题描述】:

问题:

对于 asp.net mvc 应用程序,我忽略了域文件夹并将域模型写入单独的库项目中。

具有此类库项目的 Visual Studio 将逐个文件夹命名空间。例如,如果我的库项目被调用:

ES.eLearning.Domain

我有一个名为 Services 的文件夹,它会将 Services 文件夹中的所有类自动命名为:

ES.eLearning.Domain.Services

这一切都很好,但让我觉得有点矫枉过正。我的项目相对简单,所以没有类名冲突的机会。即使有,编译器也会选择它。

所以我只是手动将命名空间名称编辑为项目名称,即:

ES.eLearning.Domain

这样,在开发前端时,域模型项目只是一个黑匣子,它提供了一个域模型。而且我没有看到将命名空间名称与项目文件夹结构耦合的意义,而不是将其视为一个功能块。

所以出现了两个问题:

  1. 这是不好的做法吗?如果是这样,为什么?请记住:这些都是中小型项目。

  2. 有没有办法告诉 VS 2010 如何命名我的命名空间?

谢谢

注意:在我对项目的命名中,ES 是客户端,eLearning 是应用程序,Domain 是组件

PS:我在 SO 上找到的关于命名空间命名约定的其他问题解决了不同的问题。所以据我所知不是重复的。

【问题讨论】:

    标签: asp.net-mvc namespaces naming-conventions domain-model


    【解决方案1】:

    为防止特定文件夹强制其内容使用文件夹名称作为命名空间部分,您可以右键单击文件夹,选择“属性”,然后将“命名空间提供程序”更改为False。这需要对它适用的所有文件夹进行,所以我不确定这是否真的完全回答了你的问题。

    编辑:看起来ReSharper 添加了这个功能。

    【讨论】:

    • 我看到的唯一属性是文件夹名称...我发现 Namespace Provider 是一个 ReSharper 属性。
    • 嗯,是的,你是对的。抱歉 - 在回答之前我没有安装 R# 的机器来检查,我认为这是 VS 的事情。我认为特定于 R# 的答案对您来说不是一个可行的解决方案?
    • 没有完全符合要求的答案,但这个答案让 ReSharper 成为焦点。所以给了它饼干。
    【解决方案2】:

    让您的 IDE 使用适合您特定环境的命名约定是一种很好的做法。您可以使用项目属性的 Application 选项卡中的默认命名空间框来更改 VS 自动插入到您的类文件中的命名空间。

    【讨论】:

    • 谢谢,手榴弹:+1 关于良好实践的一点。但是,您关于默认命名空间名称的提示不会停止 VS 将文件夹名称添加到我的默认命名空间名称中。 (注意:默认命名空间名称默认为项目名称,这对我来说很好;我的问题是 IDE 将文件夹名称添加到命名空间声明)。
    【解决方案3】:

    我不确定是否可以在 VS2010 中配置以禁用此功能.. 但我不会那样做。

    如果您的代码文件放在 Domain 文件夹中,则其命名空间应为 Company.Domain。如果域有子文件夹 Services,命名空间应该是 Company.Domain.Services。这是一个很好的(重要的是 - 常见的做法)。

    你最好遵守规则,而不是违反它们:)

    【讨论】:

    • alexanderb:质疑规则总是好的。规则并不总是好的:我从 MS Access 和 VBA 开始,并立即不喜欢“标准”,即 Leszynski 命名约定。它不会将任何地方移植到 Access 之外,也不会考虑现代智能感知。但就这样吧,我听着。
    【解决方案4】:

    我的建议是在命名命名空间、文件夹和类时使用单数结尾。例如

    namespace ES.eLearning.Domain.Services
    

    会被推荐为

    ES.eLearning.Domain.Service // <-- note missing "s"
    

    另外一个在源代码中的使用例子:

    ES.eLearning.Domain.Constants.FileTypes.Text
    

    可以“更好”地理解为

    ES.eLearning.Domain.Constant.FileType.Text
    

    这都是个人喜好,不是规则。只是一件小事,可能会使代码(命名空间)更短,同时更易于阅读。

    PS。另一方面,ASP.NET MVC 不遵循这个“规则”:

    Content
    Controllers
    Models
    Scripts
    Views
    

    但无论如何,没有什么能让你在源代码中“重命名”它们。

    【讨论】:

    • @J Pollack:我不同意那个说法。我认为命名空间是保存事物的东西,例如服务或文件类型。例如,Text 只是众多 FileType 中的一种。
    • 好吧,我只是想表明还有另一种方法。在数据库上下文中,这是有道理的。使用复数表名,编写一个查询,给出如下内容: SELECT tags.name, tags.description FROM tags WHERE tags.xxx = YYY;并且“tags.name”看起来有点奇怪,因为它看起来像很多语言中的属性访问。原谅题外话:)
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2016-03-25
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2018-03-21
    相关资源
    最近更新 更多