8

我正在考虑将我用 C# 编写的类库之一作为开源发布。在此之前,我正在尝试进行一些重构,以满足公众的需求:)

我想知道最好使用的命名空间模式是什么?基本上,我看到以下选项:

  • namespace MyTool:这对我来说看起来并不像是有组织的。我的意思是,(几乎).NET Framework 中的所有命名空间都以 System 为前缀,所以我想这并不是真正的标准方法。
  • namespace MyOrganization.MyTool:问题在于根本没有“MyOrganization”。是闲暇时写的。
  • namespace MyName.MyTool:我更喜欢更谦虚的东西。我的意思是,我真的不想在命名空间中有我的名字。

现在 Stackoverflow 上已经有几个相关的问题了,比如thisthis,但没有一个能真正回答我的问题。

有什么建议么?

4

9 回答 9

6

我会选择类似的东西:

namespace OpenSourceProjectCodeName.MajorFunctionalArea

例如:

namespace VideoWizardMagicThing.Audio
namespace VideoWizardMagicThing.Audio.Codecs
namespace VideoWizardMagicThing.Video
namespace VideoWizardMagicThing.Video.Codecs

您不必对命名空间完全发疯,您可能需要的只是一两个 MajorFunctionalArea。但是,如果不知道项目的结构或它的作用,就很难说。

于 2008-12-22T22:49:29.120 回答
0

如果它是开源的并且会有贡献者,我会选择MyTool

于 2008-12-22T22:35:50.847 回答
0

如果您以后有能力更改它,我会选择MyName.MyTool。如果您是唯一一个编写该工具的人,那么您需要充分的信任,并且将您的名字放在命名空间中不会伤害任何人。

如果您接受新的贡献者,您可以从命名空间中删除您的名字,但前提是其他人确实做出了重大贡献。如果大部分工作是你的,我会把它留在里面。

于 2008-12-22T22:38:08.597 回答
0

MyTool存在名称不唯一的问题;您正面临名称冲突。MyCompany.MyTool如果您不想给自己贴上标签,则不适用于您的情况。

实际上,我更喜欢反转与产品关联的 URI 的 Java 约定。对于公司,这是公司网站。对您而言——您是否有一个地址不太可能很快更改的博客/个人主页?然后使用名称,将 TLD 和二级域颠倒过来。在我的情况下:net.madrat.MyTool

我知道有几个人使用TheirName.MyTool哪个很好。但是,一旦有第二个贡献者,这就会成为一个问题。

于 2008-12-22T22:39:29.593 回答
0

我建议获取 MyOrganization 并使用它。如果您曾经为工作拿过钱,您将需要一个实体,它可以保护您免于承担责任。设置一些东西相当容易。

或者只是使用 MyOrganization 名称并稍后创建实体,但如果您不先设置它,您将面临合法名称冲突等风险。

于 2008-12-22T22:48:16.407 回答
0

你可以做 MyToolProject.MyTool。或者,您可以为您的“组织”想出一些有创意的名称,然后将其作为您未来所有开源项目的名称,即使它现在只是一个。然后你可以拥有 MyCreativeOrgName.MyTool。

于 2008-12-22T22:48:22.337 回答
0

MyOrganization.Technology仍然是启动命名空间的推荐方式。

我曾经有过类似的问题,我以前的项目命名空间是我的爱好。所以我刚刚为一个开发组编了一个名字(你想要一个简短易读的)并开始使用它。

但是,请记住,可用性仍然是关键。例如,这是该规则的一个例外。我们的开源Lokad 共享库遵循 .NET 本身的命名空间(即:SystemSystem.Threading)。这是因为我们的开发人员应该可以使用许多日常帮助程序和扩展,而他们甚至没有注意到他们正在利用非 BCL 代码。

它还使 using 声明看起来更好。

于 2008-12-23T07:14:18.507 回答
0

MyTool听起来很像项目代码/品牌名称?

在这种情况下,如果您希望在不使用您的组织或个人名称的情况下对其进行进一步分类,请选择它要解决的行业问题领域

视频编辑.MyTool

会计.MyTool

家庭自动化.MyTool

于 2008-12-23T07:56:44.710 回答
-1

我以 Idunno.* 结束了几个项目(我的网站),SharpSTS.* 用于主要项目(因为那是项目名称)

于 2008-12-22T22:39:25.893 回答