想象一下,您想要创建一个新的算法库。
例如:
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。这意味着:您必须发布两个库(对您的用户)!
非常感谢任何建议。
感谢。
答案 0 :(得分:1)
如果要使用LibraryPathfinding,则必须导入Com.MyCompanyName.Collections和Com.MyCompanyName.LibraryPathfinding。这意味着:您必须发布两个库!
这通常是您想要拥有的行为。如果“PriorityQueue”是您可能希望将来在项目中重用的类,则应将其隔离为新项目 - 与任何其他相关类一起分组。代码重用是一件好事。