课程《设计模式之美》笔记之关于面向对象与面向过程

1、滥用getter、setter方法会导致看似是面向对象的代码,实际是面向过程的。
面向对象封装的定义是:通过访问权限控制,隐藏内部数据,外部仅能通过类提供的有限的接口访问,修改内部数据。
ps:当类里有list属性,即使没有setter方法此list还是有被修改得可能,例如

List<Item> items = cart.getItems();
Item item = items.get(0);
item.setPraice(19.0);

在设计实现类的时候,除非真的需要,否则,尽量不要给属性定义 setter 方法。除此之外,尽管 getter 方法相对 setter 方法要安全些,但是如果返回的是集合容器(比如例子中的 List 容器),也要防范集合内部数据被修改的危险。
(只要返回得是一个浅拷贝,都存在被篡改数据得风险)

传统的 MVC 结构分为 Model 层、Controller 层、View层这三层。不过,在做前后端分离之后,三层结构在后端开发中,会稍微有些调整,被分为 Controller 层、Service 层、Repository 层。Controller 层负责暴露接口给前端调用,Service 层负责核心业务逻辑,Repository层负责数据读写。而在每一层中,我们又会定义相应的 VO(View Object)、BO(BusinessObject)、Entity。一般情况下,VO、BO、Entity 中只会定义数据,不会定义方法,所有操作这些数据的业务逻辑都定义在对应的Controller 类、Service 类、Repository 类中。这就是典型的面向过程的编程风格。
实际上,这种开发模式叫作基于贫血模型的开发模式。(因为数据和操作分开在不同的地方,所以这是一个完全的面向过程的编程。)

!!原来我一直使用得开发模式与思想是违背了面向对象的编程风格嘛?????

在面向对象的编程中容易写出面向过程的代码是因为,面向过程编程更简单也更符合常人的逻辑思维,我们遇到问题通常都是第一步怎么做第二步怎么做一步步解决问题,这就是面向过程,而面向对象则是拆分好几个模块,最后拼接在一起解决问题,这显然是违背正常逻辑的,所以更难,也更需要设计的能力。

虽然面向对象好像更高大上,但是并不是说面向过程的编程就是不可取的,在一些微小程序或者是数据处理的代码里,面向过程编程就更合适,再者每一个面向对象的根本实现也都是面向过程的,只要在使用面向过程编程时,注意控制好副作用(例如不易复用、不易扩展等)。


总结:不用太过避讳使用面向过程编程的方式,各有各的优缺点,重要的是要写出易维护、易扩展、易读、易复用的代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值