【问题标题】:Should a class have the same name as the namespace?一个类应该与命名空间同名吗?
【发布时间】:2010-12-20 16:45:02
【问题描述】:

我正在设计一个命名空间来保存一组类,这些类将为几个不同的应用程序处理与 用户 相关的任务。 (登录、验证等)

问题是命名空间将被称为Fusion.User,但它需要该命名空间中的一个类才能调用User

你应该有一个与命名空间同名的类吗?还是我在这里采取了错误的方法?

【问题讨论】:

标签: .net naming-conventions namespaces class-design


【解决方案1】:

以与名称空间(包)相同的方式命名类可能会导致认为类是包的核心。但如果我理解正确,用户只是你的数据对象。

据我所知,您有两个选择:

  1. 以不同的方式命名您的名称空间,例如Fusion.Security
  2. 使用类名的后缀来表明其用途,例如UserDTO、UserAction 等。

【讨论】:

  • 我喜欢“Fusion.Security”的建议——也许我的想法太狭隘了
【解决方案2】:

命名空间是Fusion.User
类全名将是 Fusion.User.User

保持它们不同是一个好习惯,因为

  1. 避免了开发者的困惑
  2. 在某些情况下看起来也很丑,比如我们使用两个用户。

    使用 Fusion;
    命名空间 xyz {
    公共类测试
    {
    User.User userObject {get;set;}
    }
    }
    所以更好的选择是使用不同的名称

【讨论】:

    【解决方案3】:

    在某些情况下,使用相同的名称会导致问题。立即想到的一个是使用 WCF 服务时。当我最近在命名空间“companyName.someBehaviour”中的一个名为“someBehaviour”的类中执行此操作以使用“MyService”时,编译器对我说 MyService 在 someBehaviour 命名空间中不存在。将类名更改为不同的名称(并且更有用)解决了这个问题并允许我编译程序集。

    【讨论】:

      【解决方案4】:
      【解决方案5】:

      我可能将命名空间称为“usertasks”以避免任何混淆。您将不得不定期使用命名空间限定内部类以避免混淆编译器。

      【讨论】:

        猜你喜欢
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多