繁体   English   中英

空类型的设计不好吗?

[英]Is an empty type bad design?

我正在提高来自Python的技能,并正在探索泛型。 我有一个统一的小“游乐场”,其中有以下设施:

        NM          (NM) - sends power between machines
| PM |--||--| PM |  (PM) - distributes power internally
| CC |      | CC |  (CC) - consumes power
| CC |      | CC |       - generates power

一台机器具有消耗并产生“动力”的组件。 电源管理器(PM)知道机器中的所有组件(CC),并处理机器中的电源分配。

然后,我想在不同的机器之间分配电源,因此我编写了NetworkManager(NM)类,以便每个连接的机器的不同网络都有其自己的管理器。 然后,电源管理器可以向“网络”上的其他计算机发送电力,也可以向其发出请求。

下一步的逻辑步骤是使其具有通用性,因此我不仅限于电源。 也许我想送水或热。 我制作了两个类来替换PowerManager和仅电源的NetworkManager:

ResourceManager<TResource> where TResource : Resource { ... }

NetworkManager<TResource> where TResource : Resource { ... }

这似乎很棒,因为现在可以创建一个管理器来处理计算机所需的任何资源。 但是,这里的警钟是我的Resource超类及其子类完全为空。 除了它们是一种类型(定义了经理处理的资源)这一事实外,我不需要它们。 我尝试通过尝试new ResourceManager("power")并根据字符串名称匹配资源类型来考虑“字符串类型”的方法,但这种方法并不僵硬,我想避免因拼写错误等导致的编译时错误。

那么, 总而言之 :我该如何等效于创建一个new ResourceManager<Electricity>()而又不创建一个空的Electricity : Resource类? 还是解决问题的可接受方法? 我觉得我可能正在延伸泛型的意图。

我没有发现天生就有错。 其他选择是创建一个接口(即IResource),Resource类将在需要时实现该接口,其他人也可以实现:

ResourceManager<IResource>
NetworkManager<IResource>

使用Interface可获得的一些好处包括在对代码运行单元测试时可以使用模拟。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM