【问题标题】:C# Open Source Project Namespace [closed]C# 开源项目命名空间 [关闭]
【发布时间】:2008-12-22 22:32:59
【问题描述】:

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

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

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

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

有什么建议吗?

【问题讨论】:

  • 想出一个虚构的 MyOrganization 有什么问题?或者 Jokepu.YourTool 怎么样?

标签: c# .net open-source namespaces


【解决方案1】:

我会选择类似的东西:

namespace OpenSourceProjectCodeName.MajorFunctionalArea

例如:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        我认识一些使用TheirName.MyTool 的人,这很好。但是,一旦有第二个贡献者,这就会成为一个问题。

        【讨论】:

        • 是的...虽然 java 规定使用 tld.domname.X,(至少在我 10 年前最后一次接触它时).NET 有一组不同的准则和约定,它们与域名和这种风格。 msdn.microsoft.com/en-us/library/893ke618(VS.71).aspx
        • @Kev:我不得不说我一点也不在乎.NET 编码指南。它们是有史以来最糟糕的指南之一。完全武断,没有任何理由。这对有争议的决定非常不利。尽管在这种情况下,我实际上同意他们的观点。
        • @Konrad - 你读过pearsonhighered.com/educator/academic/product/…。既不武断也不缺乏正当理由,并由 Richter、Brumme、Mariani 注释。这些家伙不会把他们的名字冠以不合理的“仅仅因为”。值得一读。
        • @Konrad - 但我原则上同意你的观点,没有押韵或理由的任意标准确实很糟糕。
        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

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

            VideoEditing.MyTool

            Accounting.MyTool

            HomeAutomation.MyTool

            【讨论】:

              【解决方案8】:

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

              我以前在为我的爱好命名空间时遇到过类似的问题。所以我刚刚为一个开发组编了一个名字(你想要一个简短易读的)并开始使用它。

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

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

              【讨论】:

              • 恕我直言“入侵”.net 官方命名空间不是一个好主意。如果代码是第 3 方,它应该属于第 3 方命名空间。不知道您的某些代码使用外部组件可能会导致很多难以调试/发现的问题。
              • 同意。但这是一种妥协。唯一“侵入”系统命名空间的程序集实际上用于我们公司的每个原型、内部或外部项目。它就是那么有用。此外,它确实被多个代码库完善了,所以还没有任何问题。
              【解决方案9】:

              我在几个项目(我的网站)中使用了 Idunno.*,在主要项目中使用了 SharpSTS.*(因为那是项目名称)

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-12-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多