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

Kev*_*ice 5 .net c#

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

(原始问题仍在此框下方)

摘要:您不应该将类命名为与其命名空间相同的类.因此,产品名称应该用于命名空间还是主类?

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

基本原理: Visual Studio默认使用项目名称作为命名空间,程序集名称,以及实际可交付的.exe或.dll - 这些是最明显的项目,所以我认为在我的产品名称之后命名命名空间是有意义的,然后按照Jon Skeet的建议,在他的回答中将主类命名为___Main或__Program或__Module.我想,没有一个正确的答案.


原始问题:

完全得到它 - 不要把它的名字命名为它的NAMESPACE!

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

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

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

namespace Acme.Web.Foobarinator
{
    public class Foobarinator { } // BAD! Same name as namespace!
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}
Run Code Online (Sandbox Code Playgroud)

坏!!!命名空间和类名都是一样的!!

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

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

namespace Acme.Web
{
    public class Foobarinator { }
    public class FoobarinatorInfo { }
    public enum FoobarinatorMode { Disabled, Enabled }
    // More pollution in future...
}
Run Code Online (Sandbox Code Playgroud)

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

namespace Acme.Web.Foobarinator
{
    public class FoobarinatorMain { } // Not the name of the product!
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}
Run Code Online (Sandbox Code Playgroud)

选项3:使用相关类型的子类/类型.但是,将所有内容封装在一个类中最终会违反产品发展过程中的关注点分离:

namespace Acme.Web
{
    public class Foobarinator
    {
        public class FoobarinatorInfo { }
        public enum Mode { Disabled, Enabled }
    }
}
Run Code Online (Sandbox Code Playgroud)

你的意见?

我在哪里妥协?

相关问题和文章:

如何避免为类及其命名空间使用相同的名称,例如Technology.Technology?

一个类是否应该与命名空间同名?

名称空间与类名同名

一个类是否应该与命名空间同名?

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

Jon*_*eet 3

我会用:

namespace Acme.Web.Foobarinator
{
    public class Program { } // The entry point
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}
Run Code Online (Sandbox Code Playgroud)

甚至:

namespace Acme.Web.Foobarinator
{
    public class EntryPoint { }
    public class FoobarinatorInfo { }
    public enum Mode { Disabled, Enabled }
}
Run Code Online (Sandbox Code Playgroud)

第一个是 Visual Studio 默认值(至少对于某些项目类型而言),第二个使类的作用非常清楚。