我有一组相互关联的类,它们全部被一起重写以创建特定的实现。我想知道将相互关联的子类包含在命名空间中是否是一个好主意。

出于示例目的,请考虑以下命名空间和类:

namespace Protocol
{
  public abstract class Message { }
  public abstract class Driver { }
}
namespace Protocol.Tcp
{
  public class TcpMessage : Message { }
  public class TcpDriver : Driver { }
}
namespace Protocol.Ftp
{
  public class FtpMessage : Message { }
  public class FtpDriver : Driver { }
}

构建命名空间的最佳方法是什么?由于基类实际上不属于 Protocol.Tcp 命名空间或 Protocol.Ftp 命名空间,因此似乎不可避免地要公开命名空间中的继承。

有帮助吗?

解决方案

我想你可能是担心太多了!

逻辑上有意义吗?您知道在命名空间中哪里可以找到您的代码吗?

我更愿意看到像上面这样的代码库,其中包含少量类,与具有层次结构的名称相关,而不是一个所有事物都相互关联的大型命名空间。

请记住,命名空间正是为此而存在的, 逻辑地组织你的代码库

你所拥有的似乎合乎逻辑:)

编辑:

举个例子:

using System.Data;
using System.Data.Sql;

;)

其他提示

原始标签显示这篇文章是关于 C# 的 - 因此多重继承是无关紧要的 - 你不能在 C# 中进行多重继承。

也许您应该考虑定义一些接口来定义基本契约 Message 和一个 Driver 然后您可能会觉得可以更自由地使用名称空间结构来模仿技术差异。

如果是我,我会定义 2 个命名空间:

Protocol

Protocol.Driver

这样的名称空间将您的“库代码”与“可执行 /测试代码”分开。我还创建了我的命名空间以匹配目录结构;它将为您的程序结构和代码文件提供逻辑。(也许你已经这样做了......)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top