创建新库或项目时如何设置命名空间?

How to set namespace when you create a new library or project?

假设您想创建一个新的算法库。

例如:

namespace Com.MyCompanyName.LibraryPathfinding 
{
//...
}

另一个可以导入这个库(包括命名空间)并使用它。

例如:

using Com.MyCompanyName.LibraryPathfinding

namespace Com.YourCompanyName.ProjectX
{
//...
//ProjectX is a game
}

我的问题是:

如果 LibraryPathfinding 使用了一些类似于 "PriorityQueue" 的 util class,如何设置 PriorityQueue 的命名空间?

(1):

namespace Com.MyCompanyName.LibraryPathfinding.Collections
{
    public class PriorityQueue 
    {
       ////
    }
}

(2) :

namespace Com.MyCompanyName.Collections
{
     public class PriorityQueue
     {
       ////
     }
}

如果选择(1),表示PriorityQueue是LibraryPathfinding的一部分。

这样做的好处是:

LibraryPathfinding 是完全独立的。

如果您的项目需要寻路,只需导入"Com.MyCompanyName.LibraryPathfinding"

这样做的缺点是:

只要您的项目需要 PriorityQueue,就必须导入 "Com.MyCompanyName.LibraryPathfinding",即使 ProjectX 不需要 Pathfinding。

例如: 在 ProjectX 中,AIManager 需要一个使用优先队列的仇恨列表。 但是仇恨列表不应该依赖于寻路!

如果选择(2),则可以解决(1)的问题。

这样做的缺点是:

LibraryPathfinding 不会完全独立。 (LibraryPathfinding 是一个封装,它不应该公开实现细节。)

如果你想使用 LibraryPathfinding,你必须导入 Com.MyCompanyName.Collections 和 Com.MyCompanyName.LibraryPathfinding。这意味着:您必须发布两个库(给您的用户)!

如有任何建议,我们将不胜感激。

谢谢。

如果要使用 LibraryPathfinding,必须导入 Com.MyCompanyName.Collections 和 Com.MyCompanyName.LibraryPathfinding。这意味着:你必须释放两个库!

这通常是您想要拥有的行为。如果 "PriorityQueue" 是一个 class,您可能希望在将来的项目中重用它,您应该将其隔离到一个新项目中 - 与任何其他相关的 class 一起分组。代码重用是一件好事。