在命名空间结构中公开继承层次结构是一个坏主意吗?
-
09-06-2019 - |
题
我有一组相互关联的类,它们全部被一起重写以创建特定的实现。我想知道将相互关联的子类包含在命名空间中是否是一个好主意。
出于示例目的,请考虑以下命名空间和类:
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
这样的名称空间将您的“库代码”与“可执行 /测试代码”分开。我还创建了我的命名空间以匹配目录结构;它将为您的程序结构和代码文件提供逻辑。(也许你已经这样做了......)
不隶属于 StackOverflow