手机版

PHP杂谈《重构-改善既有代码的设计》第五次简化函数调用

时间:2021-10-09 来源:互联网 编辑:宝哥软件园 浏览:

思维导图

介绍之前的系列文章,我更关心的是把你的函数重组为PHP杂谈《重构-改善既有代码的设计》中的一个,但是我觉得我还是没有说清楚,还有很多事情我自己也不明白。而且这是我在这个领域的第一篇文章,有很多瑕疵,所以会经常修改。如果你有什么好的意见,请告诉我一两个。今天我们讲的是“接口”,它不是“接口”,而是一个总称。一般来说,我们可以调用函数或者URL(一般用来提供数据)给别人作为接口使用。3354可能有其他含义。毕竟我还是个“新手”。如有理解错误,请指正。我们知道“易于理解和使用的接口”是开发好的面向对象软件的关键。本文将介绍“使界面更简单易用”的重构技术。副标题:如果你觉得我的文章太长,看起来很麻烦,我建议你“只看图片和粗体字”。昨天,“老”博主给我留言。之前没有仔细想过,这次也想过。信息是:

我个人觉得很多东西只有关注了才能知道它的价值。至于简单性,重构的目的也是为了简单易懂。至于坚持,我觉得在技术上,我们经常需要这种坚持。即使你以后觉得自己错了,我们还是会有收获的。只有经历过多次磨合(这种磨合既有对也有错),才能知道它的价值,收获我们需要的东西。至于福利,“老”是指公司的福利吗?是的。很多时候,我们需要在编码过程中赶上进度,在重构中也会犯一些错误。所以我的建议是,开发之初,在设计改造的时候要不断磨合,不要觉得浪费时间。很多时候,一个好的结构可以加快你的发展。技术术语

重命名方法条件:如果函数名未能揭示函数的用途,修改函数名。

动机:我强烈提倡的编程风格之一是将复杂的处理分解成小函数。但是,如果小功能的名字不好,会让你纠结却想不出各自的用途。命名函数的好方法:考虑应该给这个函数写什么样的注释-——尝试将注释改为函数的名称。想出一个好名字不容易,需要经验。如果你想成为一名真正的程序员,“命名”的水平非常重要。如果你发现一个函数名不能很好地表达它的目的,你应该立即修改它。示例:

添加状态:如果一个函数需要从调用者那里得到更多的信息,就给函数添加一个参数,让参数带入函数需要的信息。动机:1。添加参数是一种常用的重建技术。2.修改后的函数需要一些过去没有的信息,所以需要给函数添加一个参数。3.除了添加参数,只要有可能,其他选项都比“添加参数”好,因为其他选项可能不会增加参数列的长度。3354太长的参数列会让程序员记不住那么多参数。

参数状态:如果函数体不再需要参数,则删除参数。动机:1。参数表示功能信息,不同的参数代表不同的含义。函数调用,这必须担心每个参数传入什么。3354如果不去掉参数,每次通话都会格外注意。2.如果您发现有许多调用方,为了不使调用方担心,您可以通过将要移除的参数设置为某个默认值(如null)来做到这一点,以便调用方只传递那些没有默认值的参数。

将查询与修改器状态分开:如果一个函数返回对象的状态值并修改(副作用)对象的状态,则建立两个不同的函数,一个负责查询,另一个负责修改。

示例:

参数化方法状态:如果几个函数做类似的工作,但是在函数体中包含不同的值,那么创建一个函数来用参数表达这些不同的值。动机:1。一般来说,因为有几个不同的值,所以建立了几个相似的函数。2.用统一的函数代替分离的函数,并通过参数处理那些变化来简化问题。3.消除重复代码,提高灵活性。3354可以使用此参数来处理其他更改。

例子:

将参数替换为显式方法状态:您有一个根据参数值采取不同响应的函数,因此为参数的每个值创建一个独立的函数。动机:1。如果一个参数有离散值,并且在函数中有条件地检查这些参数值,并且根据不同的参数值做出不同的响应,那么应该使用这种重构。2.可以获得好处:“编译时检查代码”和“界面更清晰”(如果函数行为是由参数值决定的,那么函数的用户不仅要观察函数,还要判断参数是否“合法化”。3354和法律参数,文件中很少提到,必须根据上下文来判断。) 3.没有考虑“编译时检查”的好处,为了获得清晰的接口,这样做是值得的。

示例:

保存整个对象状态:如果从一个对象中获取几个值,并在函数调用中将其用作参数,则改为使用(传递)整个对象。动机:1。参数列更稳定;2.提高代码的可读性;3354长参数列难以使用,因为调用者和被调用者都必须记住这些参数的用途。

例子:

用方法替换参数状态:如果一个对象调用一个函数,并将结果作为参数传递给另一个函数(接受参数的函数也有能力调用前一个函数),让参数接受者移除参数,直接调用前一个函数。动机:1。如果函数通过其他方式获取参数值,那么它不应该通过参数获取值。2.过长的参数列会让程序读者更难理解,所以要尽可能缩短参数列的长度。3.方法:看“参数接收者”能否通过“与调用者相同的计算”获得参数携带值。4.如果函数的调用端通过对象内部的另一个函数计算参数,并且在计算过程中“调用端的其他参数没有被引用”,那么计算过程可以转移到被调用端,从而移除参数。例子:

引入参数对象条件:有些参数总是同时自然出现,所以用一个对象代替这些参数。动机:

1.一组参数可能同时使用几个函数,这些函数可能属于同一类,也可能属于不同类。3354就是所谓的数据丛。2.我们可以使用一个对象包装所有这些数据,然后用一个对象替换数据块。3354目的地:即使只是将这些数据组织在一起,这样做也是值得的。3.这种重构的价值在于“缩短参数列的长度”。此外,新对象定义的访问器也可以使代码更加一致。3354,这进一步降低了理解和修改代码的难度。4.这种重建可以给你带来更多的好处。3354当你把这些参数组织在一起的时候,往往很快就能发现“被移植创建新类”的行为。3354减少重复代码。例子:

移除设置方法状态:在创建对象时,需要在你的类中设置一个特定的值范围,这样就不会改变,所以移除该值范围的所有setter。

动机:1。如果您为一个范围提供了一个设置器,这意味着该范围可以更改。2.如果您不想在创建对象后更改此值范围,请不要为其提供设置功能。这样,你的意图就会更加清晰,可以排除其价值被修改的可能性。例子:

隐藏方法状态:如果有一个函数从未被其他类使用过,将该函数设置为私有。动机:

1.重构经常提示你修改“功能的可见性”。3354始终检查可以隐藏的功能。2.始终检查是否有可能降低功能的可见性(将其私有化)。当您移除对另一个类中的函数的调用时,您应该检查。3354特别检查如上所述的设置器功能。用工厂方法替换构造函数:如果您想创建一个对象,而不仅仅是简单的组件操作,请用工厂方法替换_ _。动机:在子类过程中用工厂方法替换类型代码。你可能经常需要类型代码来创建相应的对象。例子:

下一位:

用异常条件替换错误代码:如果函数返回特殊代码来指示错误条件,请改用异常。动机:把“普通程序”和“错误处理”明确分开,这样程序更容易“理解”。

例子:

结语把我的每一份收获分享给大家,如果每个人都有一点收获,那会让我很开心。文章如有错误,请指点一二。不知道是不是找错地方了。有博主留言说“博客花园主要流行C#”。你看人家主要是PHP程序员吗?很少有人给我留言,也很少有人指出我文章中的错误(我的文章真的没有错误吗?),昨天,“@四眼蒙面人”给我留言了,和他聊天收获很大。也感谢他的批评指正,希望多和大家交流。

版权声明:PHP杂谈《重构-改善既有代码的设计》第五次简化函数调用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。