任务4:不使用getter/setter
Last updated
Was this helpful?
Last updated
Was this helpful?
有同学听到不使用 getter/setter 可能大吃一惊:我平时都是用 IDE 生成 getter/setter 的,十分顺畅!为啥不让我用呢?
最主要的目的是为了强制更好的封装。当你写完一段代码,一定要思考它最好的去处:去到与它操作的数据最相近的地方。在面向对象的设计中,外部不应了解对象的内部实现和私有字段,暴露对象的私有属性有可能就是一种坏味道,提醒你有些行为可能放错了地方。
这条原则还有一个别名,叫做 “告诉而非询问”(Tell, Don't Ask) 原则。
消除对象直接暴露出来的public
字段
消除对象暴露出来的 getter/setter 方法
你有没有遇见必须使用 getter/setter 的场景?
你感觉这条诫条有什么价值?
《重构 2》8.2 搬移字段(Move Field)