产品商标名称要求具有相同名称的类/命名空间
本文关键字:命名空间 商标名 | 更新日期: 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 }
}