产品商标名称要求具有相同名称的类/命名空间

本文关键字:命名空间 商标名 | 更新日期: 2023-09-27 18:20:32

作者后期编辑:选择的解决方案

(原问题保留在此框下方)

摘要:不应该将类的名称与其命名空间相同。因此,名称空间或主类应该使用产品名称吗

选择的解决方案:我决定将产品名称应用于命名空间,并在主类名(例如__Module)上添加后缀。

理由:Visual Studio默认使用项目名称作为命名空间、程序集名称以及实际可交付的.exe或.dll——这些是最可见的项,所以我认为以我的产品名称命名命名空间是有意义的,然后按照Jon Skeet在回答中的建议进行,并将主类命名为__main、__Program或__Module。我想没有一个正确的答案。


原始问题:

完全明白了--不要将类命名为与其命名空间相同的类

这几乎是一个重复的问题。。。除了我花了几个小时阅读文章(见下文),却找不到或想不出一个似乎正确的解决方案。

假设我有一个名为ACME Foobarinator的产品。它有几个相关的类型(例如,设置、枚举),但不足以调用任何类型的命名空间层次结构。

创建一个单一的产品名称空间并将所有内容都放入其中是有意义的:

namespace Acme.Web.Foobarinator
{
    public class Foobarinator { } // BAD! Same name as namespace!
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}

糟糕命名空间和类名都相同!!

但是,我也希望主类是Foobarinator,因为它是商标产品名称,我希望消费者使用商标名称:var fb = new Foobarinator();

选项1:消除产品名称空间,将所有类型提升到父名称空间。但这会用特定于产品的类型(而不一定是所有公共类型)污染父命名空间。随着产品的发展,污染将增加!

namespace Acme.Web
{
    public class Foobarinator { }
    public class FoobarinatorInfo { }
    public enum FoobarinatorMode { Disabled, Enabled }
    // More pollution in future...
}

选项2:向主类添加不必要的后缀。但这混淆了产品商标名称!

namespace Acme.Web.Foobarinator
{
    public class FoobarinatorMain { } // Not the name of the product!
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}

选项3:为相关类型使用子类/类型。然而,随着产品的发展,将所有内容封装在一个类中最终会违反关注点的分离:

namespace Acme.Web
{
    public class Foobarinator
    {
        public class FoobarinatorInfo { }
        public enum Mode { Disabled, Enabled }
    }
}

你的想法

我在哪里妥协?

相关问题和文章:

如何避免类和它具有相同的名称';的命名空间,例如Technology.Technology?

类是否应该与命名空间具有相同的名称?

与类名同名的命名空间

类是否应该与命名空间具有相同的名称?

http://blogs.msdn.com/ericlippert/archive/2010/03/09/do-not-name-a-class-the-same-as-its-namespace-part-one.aspx

产品商标名称要求具有相同名称的类/命名空间

我会使用:

namespace Acme.Web.Foobarinator
{
    public class Program { } // The entry point
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}

甚至:

namespace Acme.Web.Foobarinator
{
    public class EntryPoint { }
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}

第一个是Visual Studio的默认值(至少对于某些项目类型),第二个非常清楚地表明了类的角色

创建一个更具体的名称空间,说明类的用途:

namespace Acme.Web.Foobarinator.Client {
   public class FoobarinatorInfo { }
   public enum Mode { Disabled, Enabled }
  public class Foobarinator { }
}

我会更改名称空间的名称以描述产品,而不是产品的名称。因此,如果Foobarinator与图形有关,请将名称空间设为Acme.Web.Graphics

一种选择是使用复数。我倾向于这样做,即使我的名称空间中没有实际的商标产品名称。

例如,假设您有一个票务系统:

namespace Acme.Web.Tickets
{
    public class Ticket { }
    public class TicketInfo { }
    public enum Mode { Disabled, Enabled }
}

你可以将其应用于你的产品:

namespace Acme.Web.Foobarinators
{
    public class Foobarinator { }
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}