php代码不好维护,PHP干货|依赖注入——让你的代码更好维护

应小可爱们的强烈要求|终于把IT交流群给建起来了

(加群:370382869 聊技术)

0818b9ca8b590ca3270a3433284dd417.png

1.什么是好代码

经常会听到“这个人是大牛,你不是”,“你写代码质量高,实习生写的程序很糟糕”,那么为什么这么说呢?当然就是看解决问题的能力以及代码的可维护性了。解决问题的能力,四哥已经在很多场合传授过很多经验技巧,今天我们就来看看第二条,代码的可维护性。

首先来思考一个问题,什么样的代码是好代码。有同学会说,有缩进,有注释,那么是不是呢?答案是“不是”。是的,有注释有缩进的代码只是说代码格式化比较好,有相应的说明,这些是代码规范啊,如果满足了这些基本规范就是好代码,岂不是太容易了。

其实好的代码要满足——高内聚低耦合。哇,新名词,什么叫做高内聚低耦合呢,我们分开来解释:

内聚

指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(程序段之间)联系的越紧密,则它的内聚性就越高。理想的内聚性要求模块的功能应明确、单一,即一个模块只做一件事情。

举个栗子,通过一个类就可以完成分页工具条的生成,这个类中呢对每一个流程都专门封装了一个方法,比如计算页码个数、配置工具条参数、生成最终html代码,这些方法之间互相调用,通过调用一个方法就可以得到一个完整的分页工具条代码,我们可以想到中间方法之间互相调用得到一个最终的结果,这就是高内聚的体现。

耦合

耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。

我们这么说如果修改了一段代码,需要同时修改很多个文件,因为这个很多文件都调用了这段代码,我们就认为这个耦合性高,通过描述大家应该可以看到高耦合是不好的。

2.知识讲解

我们来看一个用户点击忘记密码后发送邮件的例子,通常我们可以这样实现

0818b9ca8b590ca3270a3433284dd417.png

上面的代码中调用User类的ForgotPassword方法后,实例化邮件类 EmailSenderByQq并调用邮件方法发送邮件。User类依赖邮件对象 EmailSenderByQq,没有 EmailSenderByQq就发不了邮件。

突然有一天,QQ 的邮箱服务器挂了,或者我们不在使用QQ邮箱服务了,怎么办?可能你会说更换邮件发送类呗,把所有依赖 EmailSenderByQq对象的代码全部更新为163的邮件对象 EmailSenderBy163。

但是,我们的项目是一个牛逼闪闪的大项目,很多地方都实例化了 EmailSenderByQq(耦合严重) ,一个一个找到这个类,然后再一个一个的改掉,此刻你的脆弱的小心脏是否会感觉要挂掉,幼小的心灵是否会永远的留下伤痕?是不是很绝望,是不是很无助?但是代码是自己写的,哭着也要坚强地说没问题。

有好的解决方法吗?

我们把User类依赖的EmailSenderByQq对象,通过属性赋值的方式传递进去,降低User类对EmailSenderByQq对象的依赖。

0818b9ca8b590ca3270a3433284dd417.png

当然我们也可以通过别的方式传递进去,比如构造方法和其它的setter方法,下面是一个构造方法的例子:

0818b9ca8b590ca3270a3433284dd417.png

上面的代码写起来是不是还是很好理解?但是你知道吗,你已经使用了一个很牛的技术——注入。“注入”,就是把一个实例传递到另一个实例的内部。

当然呢,你还可以给相同功能的类制定一个规则,这个规则就是接口(interface)啦,而在User方法的构造方法中进行约束形参必须满足某一个接口。这样我们的代码就更健壮了呢。但是你知道吗,当你用接口进行了这些约束后,就又使用了一个更加牛的技术呢,这个技术就是——依赖倒置原则。

做个小结:有些听起来高大上的名词,其实并没有想象的那么复杂,技术就像一层窗户纸,就看你有没有能力捅破它!

源码快讯

2017年10月16日,我们源码时代迎来了第23期PHP的小可爱,在这接下来的4个多月里面,希望我们能共同进步,也许曾经有过迷茫,焦虑,但是未来,拼搏努力将会使我们前行的脚步变得坚定,期待蜕变~

0818b9ca8b590ca3270a3433284dd417.png

推荐阅读

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值