纯虚拟c ++编码的优缺点

时间:2015-11-16 14:20:37

标签: c++ inversion-of-control pure-virtual

我将从Java背景开始,今天与我们的一位C ++开发人员进行了对话,讨论如何将现有代码转换为纯虚拟方法(接口),并将它们作为依赖注入在整个代码中使用,以便更好地解耦

他试图说服我,只有当代码中存在“逻辑”并且代码只是从PC收集信息时才应该使用它们。

长话短说,我正在寻找为什么要重构代码并使用IoC和纯虚方法而不是按原样保留工作耦合代码的充分理由。

2 个答案:

答案 0 :(得分:2)

您应该或不应该重构现有代码的原因有很多。每种情况都是独特的。如果你正在谈论某种具有大型代码库的项目,并且你想要重构它的核心,这种核心工作得很好且经过适当测试,而不是99%的情况,我建议你不要这样做。您可以在测试代码中添加更多错误,而无需进行真正需要的改进。 如果代码只是收集一些信息,您可以提取使用此对象的测试类的接口。如果您因某些原因不使用单元测试,请将其保留原样。 总的来说,你的oponent可能是正确的,当你真正需要它们时创建接口并编写简单依赖项提取的干净代码。

答案 1 :(得分:1)

  

为什么要使用纯虚方法?

我尝试编写基类函数来为所有接口方法提供默认行为。我很惊讶这些默认值经常会产生一些错误处理(使用本地接受的机制)。

举一个例子,我研究了接收命令来设置led状态的代码。在开发过程中,“其他软件”有时会(错误地)请求明确禁止要求的颜色。 ('Red'禁止状态导致5)我的默认函数生成了相应的错误消息,并确定了哪个“其他软件”发送了错误的请求。

还有一些情况在某种程度上没有适当的默认行为。对于这些情况,我创建了纯虚方法。声明纯虚方法是记录基类不提供功能的想法,因此要求所有派生类必须提供一些代码来支持这个概念。

“纯虚函数或纯虚方法是必需的虚函数,由非抽象派生类实现” - 维基百科

  

为什么要重构代码?

可读性。