任务4:不使用getter/setter

有同学听到不使用 getter/setter 可能大吃一惊:我平时都是用 IDE 生成 getter/setter 的,十分顺畅!为啥不让我用呢?

最主要的目的是为了强制更好的封装。当你写完一段代码,一定要思考它最好的去处:去到与它操作的数据最相近的地方。在面向对象的设计中,外部不应了解对象的内部实现和私有字段,暴露对象的私有属性有可能就是一种坏味道,提醒你有些行为可能放错了地方。

这条原则还有一个别名,叫做 “告诉而非询问”(Tell, Don't Ask) 原则。

你的任务

  1. 消除对象直接暴露出来的public字段

  2. 消除对象暴露出来的 getter/setter 方法

思考

  • 你有没有遇见必须使用 getter/setter 的场景?

  • 你感觉这条诫条有什么价值?

参考

  • 《重构 2》8.2 搬移字段(Move Field)

Last updated