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

时间:2015-02-02 04:07:38

标签: c# design-patterns architecture namespaces project

想象一下,您想要创建一个新的算法库。

例如:

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

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

例如:

using Com.MyCompanyName.LibraryPathfinding

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

我的问题是:

如果LibraryPathfinding使用某些类似于" PriorityQueue"的util类,如何设置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不需要寻路。

例如: 在ProjectX中,AIManager需要一个使用优先级队列的aggro列表。 但是aggro list不应该依赖于Pathfinding!

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

这样做的缺点是:

LibraryPathfinding将不是完全独立的。 (LibraryPathfinding是一个封装,它不应该暴露实现细节。)

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

非常感谢任何建议。

感谢。

1 个答案:

答案 0 :(得分:1)

如果要使用LibraryPathfinding,则必须导入Com.MyCompanyName.Collections和Com.MyCompanyName.LibraryPathfinding。这意味着:您必须发布两个库!

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