概述
当一个类试图做很多事情的时候,通常显示为有太多的实例变量。当一个类有太多的实例变量的时候,重复代码就不会很远了。
你可以通过Extract Class来包装一些变量。在选择哪些变量放在一起作为一个组件的时候要保证每一个都是有意义的。比如说“depositAmout”和“depositCurrency”是很可能一起放进一个组件里边的。更通俗一点就是在一个类中拥有相同前缀或者后缀的那些子集变量就是预示着有很大可能需要放到一个组件中。如果这个组件作为子类是有意义的,那么你会发现使用Extract Subclass会更加简单。
有的时候一个类并不是一直会使用它的所有实例变量,这样的haunted你就可以Extract Class或者Extract Subclass很多次。
跟一个类有很多实例变量一样,当一个类有太多的代码的时候,它就成了重复代码、混论以及死亡的主要温床。最简单的解决办法(有没有提到过我们最喜欢的就是简单的解决办法?)就是在类的内部消除冗余。如果你有一个五百行代码的方法(通常都有很多代码),你也许可以将它转化为五个十行代码再加上另外从原来代码中抽出来的十个两行代码的方法的方法。
与一个类有巨大的一堆变量一样,通常对于有一个有很多代码的方法我们的解决办法或者是Extract Class或者是Extract Subclass。有一招很有用,那就是首先确定客户端是怎么使用这个类的,然后对每一个使用场景运用Extract Interface。这或许会对你更加深入的拆解类提供一些思路。
如果你面对的巨类是一个GUI类,那么你可能需要把数据和行为移到一个单独的领域对象中。这样的话可能会需要在两个地方都保存一份重复的数据并且要保持数据的同步。Duplicate Observed Data有相关建议如果处理这种情况(详情见后文)。像这种情况,特别是如果你正在使用较老的Abstract Windows Toolkit(AWT)组件的时候,你可能需要按照这样的步骤来移除GUI类,然后用Swing组件来替代。
原文链接:https://sourcemaking.com/refactoring/large-class
最后
以上就是优美香烟为你收集整理的code-smell-4-巨类的全部内容,希望文章能够帮你解决code-smell-4-巨类所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复