封装领域
问题
你有一个公共场地。
解决方案
将字段设为私有并为其创建访问方法。
之前
class Person{公共字符串名称;}
后
类Person{私有字符串名称;getName(){返回名称;}公共无效setName(字符串参数){name =参数;}}
之前
类Person{公共字符串名称;}
后
类Person{私有字符串名称;公共字符串名称{获取{返回名称;} set {name = value;}}}
之前
美元的公共名称;
后
私人美元名称;public getName(){返回$this->name;} public setName($arg) {$this->name = $arg;}
之前
类Person {name:字符串;}
后
class Person {private _name:字符串;获取名称(){返回this._name;} setName(参数:字符串):无效{this。_name = arg;}}
为什么重构
面向对象编程的支柱之一是封装例如,隐藏对象数据的能力。否则,所有对象都将是公共的,其他对象可以在没有任何检查和平衡的情况下获取和修改对象的数据!数据与与此数据相关的行为分离,程序部分的模块化受到损害,维护变得复杂。
好处
如果一个组件的数据和行为密切相关,并且位于代码中的相同位置,那么维护和开发这个组件就容易得多。
您还可以执行与访问对象字段相关的复杂操作。
什么时候不用
在某些情况下,出于性能考虑,封装是不明智的。这种情况很少见,但一旦发生,这种情况就非常重要。
假设您有一个图形化编辑器,其中包含具有x坐标和y坐标的对象。这些领域在未来不太可能改变。更重要的是,该程序涉及到许多不同的对象,这些字段都在其中。因此,直接访问坐标字段可以节省大量的CPU周期,否则调用访问方法将占用这些CPU周期。
作为一个不寻常的例子,有点类。这个类的所有字段都是公共的。
如何重构
为字段创建getter和setter。
查找该字段的所有调用。用getter替换字段值的接收,用setter替换新字段值的设置。
在替换了所有字段调用之后,将字段设为私有。
下一个步骤
封装领域只是将数据和涉及该数据的行为更紧密地结合在一起的第一步。为访问字段创建简单方法后,应该重新检查调用这些方法的位置。这些区域的代码很可能在访问方法中看起来更合适。