《设计模式之美》理论四:哪些代码设计看似是面向对象,实际是面向过程的?

王争《设计模式之美》学习笔记

哪些代码设计看似是面向对象,实际是面向过程的?

滥用 getter、setter 方法

  1. 文中首先通过一段JAVA代码例子来说明问题。说有的同学会给所有的属性都定义getter、setter 方法,这在我们写PHP的同学身上好像没有这个特质,有点无厘头。
  2. 给所有的属性都定义public的getter、setter 方法,这就跟将这两个属性定义为 public 公有属性,没有什么两样,违反面向对象封装的访问权限控制。这里作者说因此代码就退化成面向过程编程风格的了,我要说这个锅面向过程真不能背,面向过程编程风格并不是一无是处的反面样例。
  3. 文中用JAVA举例,如果用getter方法拿到了一个List集合容器,外部调用者在拿到这个容器之后,是可以操作容器内部数据,PHP倒是没有这个问题。

滥用全局变量和全局方法

  1. 在面向对象编程中,常见的全局变量有单例类对象、静态成员变量、常量等,常见的全局方法有静态方法。
  2. 全局变量和全局方法中,Constants 类和 Utils类最常用到。
  3. 将 Constants 类拆解为功能更加单一的多个类,或者不单独地设计 Constants 常量类,而是哪个类用到了某个常量,我们就把这个常量定义到这个类中。
  4. 设计 Utils 类的时候,最好也能细化一下,针对不同的功能,设计不同的 Utils 类。

定义数据和方法分离的类

  1. 传统的 MVC 结构做前后端分离之后,分为 Controller 层、Service 层、Repository 层。
  2. 在每一层中,我们又会定义相应的 VO(View Object)、BO(Business Object)、Entity。
  3. VO、BO、Entity 中只会定义数据,不会定义方法,所有操作这些数据的业务逻辑都定义在对应的 Controller类、Service 类、Repository 类中。
  4. 这种开发模式叫作基于贫血模型的开发模式.。

在面向对象编程中,为什么容易写出面向过程风格的代码?

  1. 符合人的这种流程化思维方式。
  2. 面向对象编程要比面向过程编程难一些,面向对象编程需要设计、思考、封装和考虑类之间的交互。

面向过程编程及面向过程编程语言就真的无用武之地了吗?

  1. 脚本式的面向过程的编程风格就更适合一些。
  2. 类中每个方法的实现逻辑,就是面向过程风格的代码。
  3. 面向对象和面向过程两种编程风格,也并不是非黑即白、完全对立的。最终的目的还是写出易维护、易读、易复用、易扩展的高质量代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值