当前位置:  开发笔记 > 编程语言 > 正文

用C++重构一个类

如何解决《用C++重构一个类》经验,为你挑选了2个好方法。

我有一个实现许多功能的A类.A级非常稳定.

现在我有一个新的功能要求,其中一些功能与A实现的功能匹配.我不能直接从A类继承我的新类,因为这会给我的新类带来很多冗余.

那么,我应该在两个类中复制公共代码吗?

或者,我应该创建一个新的基类并将公共代码移动到基类,并从中派生出A类和新类?但这会导致我现有课程的变化.

那么,哪种方法更好?



1> Eclipse..:

除非有一个很好的理由不修改A类,重构并建立一个共同的基础(甚至更好,一个既可以使用但又不一定来自的公共类).

您始终可以使用私有继承来访问共享功能,而无需修改类作为外部接口 - 此更改将需要重建,但仅此而已.将所有函数保留在A类中,并将它们转发到共享实现类.

您可能不想重构,而是复制代码的一个原因是,新类的功能可能会发生变化,但旧类中不需要进行相同的更改.不复制代码的原因之一是只需要在一个地方进行修复或更改.如果要发生会破坏原始类的更改,那么您可能希望复制代码.虽然在大多数情况下,只有当这两个类没有您想象的相似时才会发生这种情况,并且您将努力尝试抽象一组通用功能.



2> Jason Punyon..:

(1)除非您或您的雇主准备无限期地保留两份副本,否则不要在两个类别中复制共同代码.

(2)按定义重构会更改您已有的类.您建议的重构称为"Extract SuperClass",后跟"Pull Up Method",用于派生类通用的每个方法.这是一个很好的方法.

编辑:我记得Refactoring背后的真正宝石:在合理的范围内,它是完美的流畅和可逆的.从来没有一个"权利"只有一个"现在的权利".如果您稍后决定对这些类使用继承不是一个好的对象模型,那么您可以再次重构以使用组合(正如Josh所建议的那样).

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有