《重构——改善既有代码的设计》读书笔记(五)

一、明确一个对象的作用

1.不同类之间函数的耦合

一个类A的某个函数在另一个类B中常被调用而自己几乎不用,那么这个函数就该被转移到另一个类B中;或是将类似的功能代码转移到另一个类B中,只是将A上的原本调用这些代码的函数改为一个委托函数。这种情况我在实际中遇到的多是在某个类中声明了一个静态函数,然而这个类本身对这个静态函数可能不用或是用的很少,只不过这个类的作者在写这个类的时候顺手加在了这个类中。其实对于这种函数,应该建立一个单独的文件来专门存放这些函数,或是在一个模块中某些功能会被到处调用,那么他就应该被单独列出来而不是混在某个类中。同理,一些常量以及宏定义也应该如此处理。

2.filed的放置

这个问题是说一个类中的某个字段被另一个类多次用到,作者建议将这个字段搬移过去。但是我觉得好像这样做似乎太过关注代码的简洁而没有考虑逻辑,例如我有一个界面显示类ADialog,这个类上有一个变量int nParamNum,这个变量的值会被显示在界面上,然后同时对于这个界面我们还有一个管理类AManager,这个管理类主要是对ADilaog上的数据进行处理然后将处理后的值返回给ADilaog进行显示。那么这时,这个nParamNum在ADialog上或许只用到了三次:①被赋值  ②传递给AManager ③将nParamNum显示出来;而nParamNum在AManager中可能会有多个函数调用其来处理,那么这种情况nParamNum就应该被转移到AManager上去吗?我觉得还是不应该的,我认为nParamNum还是应该放在ADialog上而同时在AManager也有一个存储nParamNum值的变量,而不应该直接将nParamNum在ADialog中删除。当然作者也没有绝对的说遇到这种情况就要完全按他建议的做,实际问题还是需要考虑实际情况的。

3.精炼类

一个类应该是一个清楚的抽象,处理一些明确的责任。实际工作中,可能在一个类最初被创建时是这样的,但是随着需求的更改功能的增加后来者的维护等等原因,一个类上可能就会多了很多与最初设计这个类的初衷不符的代码,而将这些问题处理掉就是重构的意义。一个类要有一个明确而独立的功能,之前说过在一个类中不怕小函数多,同样在一个工程项目中也不怕类多,为了代码的清晰与便于维护哪怕为一个函数建立一个类都是值得的(当然,真的为一个函数建立一个类确实有些浪费,所以可以和上面说的一样,在一个模块中单独建立一个文件将一些以单独函数的形式存在的功能放在这个文件中作为静态函数,这样也比把这些函数混在类中更易于维护)。另外还有对于类的私有化是非常重要的,两个类之间耦合太严重很多情况下都是私有化做得不够完善,在C++中,可能在一个类中建立了一个另一个类的对象,然后就是一堆的“.”或是“->”就把要处理的值都取了过来,这种行为是很不好的。如果在一个类中用到了很多对另一个类的“.”或是“->”那么你就该考虑另一个类的私有化问题,以及这些“.”或是“->”相关的功能是否能在另一个类中封为接口了。

4.清除多余的类

多余的类是指其功能与另一个类或是另一个类的某段代码极为相似时,应考虑删除这个类或是与其相似的功能的代码,或是考虑将与其相似的类抽象出一个父类,然后在父类的基础上再拓展出原功能。

5.隐藏委托关系

这种情况就是我为了保护程序的封装性,例如上图中的例子:假设client代表客户类,person代表销售者类,department是销售者所属的部门,在最开始时(图的左侧),如果客户想要知道一个销售者的部门经理,那么客户就要找到销售者person的所属部门department,再根据部门找到其部门经理。但实际上作为客户并不需要了解销售者的部门结构,而应该由销售者直接告诉客户他的部门经理是谁,那么就在person类上添加一个接口,调用自己所用的department类来取到部门经理再返回给客户。这样客户就不在能了解到销售者的部门相关,而是直接与销售者交流就足够了。

6.去除中间人

这个与上一个刚好相对。上一种情况是客户在与销售者交流的情况下想要知道销售者的部门经理,而客户主要的动作还是与销售者交流。但是到了现在,可能客户有了更大的需求,销售者已经权限不够没法做主了,那么按照上一次的做法客户每次想要与销售者更高层次的交流都需要通过销售者来转达,那么这也是没有必要的,直接让客户去找销售部门经理就好了。这种情况就是中间人委托过度。

这种问题遇上一个问题的区别主要在于客户与谁交流的更多,如果销售者足矣应付这个小客户,只是客户偶尔提到销售部门,那么就是用隐藏委托关系的模式更适合,而如果是个大客户,足够与整个销售部门或销售部门的领导者对话,那么就去掉中间人。作者也提到了,中间人的委托度很难定好,只有根据实际情况不断调整代码结构才能让代码一直都清晰明了。

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《重构:改善既有代码设计第2版pdf》是一本由Martin Fowler撰写的软件工程经典之作,讲述了如何通过重构改善既有代码设计质量,提高软件系统的可读性、可维护性和可扩展性。这本书详细阐述了重构的原则、实践、技巧和案例,对软件开发人员、架构师和工程师都是非常有益的参考书籍。 重构是一种旨在在不改变软件系统外部行为的前提下修改代码内部结构的技术。通过重构可以消除代码中的重复、提取公共代码、改进函数和类的接口、消除魔法数字和硬编码等不良实践,使代码更加简洁、可读、可维护、可扩展,从而提高软件系统的质量。这本书中提出了多种重构技术,包括重命名、提炼函数、搬移函数、拆分类、合并类等等。通过实际案例的演示,读者可以深入理解每个技术的应用场景,以及如何正确地使用。 此外,《重构:改善既有代码设计第2版pdf》还介绍了如何在重构时保持代码的正确性和完整性。它详细阐述了测试驱动重构的思想和技术,以及如何使用测试来验证所做的重构是否正确和有效。同时,该书还讲解了如何使用重构来应对软件设计中的问题和挑战,如代码坏味道、代码膨胀、复杂度过高等等。通过阅读本书,读者可以获得许多实用技巧和经验,从而更好地应对日常编码工作中的实际问题。 总之,《重构:改善既有代码设计第2版pdf》是一本非常优秀的软件工程书籍,它提供了很多实用的技巧和经验,对于想要提高编码水平、提高软件系统质量的人员都是非常有价值的参考。 ### 回答2: 《重构:改善既有代码设计第2版pdf》是一本非常有价值的书籍,它提供了许多关于重构代码设计方面的实用技巧和建议。在开发软件时,我们通常会遇到需要改进代码的情况,而本书就为我们提供了一些重构代码的方法和原则。 本书的作者Martin Fowler强调了“渐进式重构”的概念,即在不改变系统行为的前提下,逐步改进代码。这样做可以降低风险,同时提高代码质量。他还强调了代码的“坏味道”,指的是代码中常见的一些问题,例如代码冗余、过长的方法或类等,这些问题会导致代码难以维护。 本书还介绍了一些常见的重构技术,例如提炼函数、合并重复的代码、使用多态等。这些技术可以帮助我们改进代码设计,提高系统的健壮性和可维护性。 总的来说,《重构:改善既有代码设计第2版pdf》是一个非常有用的书籍,可以帮助软件开发人员更好地重构和改进代码,并提高系统的可维护性和健壮性。通过印刷品将其的阅读体验最佳。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值