C# 产品商标名称请求使用相同名称的类/命名空间 作者后期编辑:选择的解决方案 (原问题保留在此框下方)
摘要:不应将类命名为与其命名空间相同的名称。因此,名称空间或主类应该使用产品名称吗? 选择的解决方案:我决定将产品名称应用于名称空间,并在主类名(例如,_模块)中添加后缀 理由:Visual Studio默认使用项目名称作为命名空间、程序集名称以及实际可交付的.exe或.dll——这些是最可见的项,因此我认为以我的产品名称命名命名空间是有意义的,然后按照Jon Skeet在回答中的建议操作,并将主类命名为uuuuu main或uuu程序或uuu模块。我想没有一个正确的答案C# 产品商标名称请求使用相同名称的类/命名空间 作者后期编辑:选择的解决方案 (原问题保留在此框下方),c#,.net,C#,.net,摘要:不应将类命名为与其命名空间相同的名称。因此,名称空间或主类应该使用产品名称吗? 选择的解决方案:我决定将产品名称应用于名称空间,并在主类名(例如,_模块)中添加后缀 理由:Visual Studio默认使用项目名称作为命名空间、程序集名称以及实际可交付的.exe或.dll——这些是最可见的项,因此我认为以我的产品名称命名命名空间是有意义的,然后按照Jon Skeet在回答中的建议操作,并将主类命名为uuuuu main或uuu程序或uuu模块。我想没有一个正确的答案 原始问题: 我完全明
原始问题: 我完全明白--不要将类命名为与其命名空间相同的名称强> 这几乎是一个重复的问题。。。除了我花了几个小时阅读文章(见下文),找不到或想不出一个似乎正确的解决方案 假设我有一款名为
acmefoobarinator
的产品。它有两个相关类型(例如设置、枚举),但不足以调用任何类型的命名空间层次结构
创建单个产品名称空间并将所有内容都放入其中是有意义的:
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 }
}
}
你的想法?
我在哪里妥协
相关问题和文章:
我将使用:
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 }
}
同样,我倾向于第二个。我喜欢将名称空间视为一个类别,而类名是该类别中特定功能块的描述。我认为希望将主类命名为“Foobarinator”有点荒谬。将其称为“入口点”是一个更清晰的描述,实际上它是一个HTTP模块。Acme.Web.Foobarinator.HttpModule
对您来说合适吗?我有很多这样的例子,很多时候,它只是一个类,只为类而尖叫Acme.Web.Foobarinator
。但是,一旦您添加一个或两个助手类型,您就开始需要一个子名称空间。因此,我应该在各自的名称空间中单独拥有多个名为HttpModule
的单类产品,还是应该在Acme.Web
和子名称空间中同时拥有多个单类产品?@KevinR:如果没有Foobarinator
的具体示例,就很难知道它的真正功能。。。你能不能不用Foobarinator这个词来描述这个模块的用途?@Jon:我正在开发一个URL“canonicalizer”HTTP模块。它发出301重定向以更正大写、尾随斜杠、主机名等。它被巧妙地命名为“Canonicalizer”,将在Canonicalizer.com上免费提供给社区。作为Tek4.Web.HttpModule.Canonicalizer
,一切都很棒,直到我需要添加几个枚举和CanonicalizerContext
类。我是否将这些类型放入父命名空间?如果是这样,如果事情后来演变成十几个或更多类型,会发生什么?我不会使用<代码> HttpModule < /代码>在你使用< <代码> HttpModule > />代码类的命名空间名称中:但是,我会考虑<代码>规范化模块< /代码>或类似的事情。老实说,我不确定……所以在本例中,Acme.Web.HttpModule
。除了我有多个HttpModule产品。因此,这基本上是选项1,问题是是否“污染”Acme.Web.HttpModule
所有属于不同产品的帮助器类型。正如我在硬代码中所写的——Visual Studio默认使用项目名称作为命名空间、程序集名称、,以及.exe或.dll--这些是最可见的项,因此我认为以我的产品名命名名称空间是有意义的,然后按照Jon Skeet的建议,将主类命名为uuuuu main或uu Program或uuu Module。如果产品包含子功能,我可能会使用*.Graphics等子名称空间。我想没有正确的答案。Thx for your input.FYI-“普通法商标”适用于您使用和主张商标的任何时候,因此,如果您想要主张Foobarinator,您所做的就是在商业中使用它并将其作为Foobarinator(TM)主张。你不应该通过打电话来“稀释”你的用法