目的
「リファクタリング」を理解するためにサンプルコードを PHP で書き換えてみました。
今回は「フィールドのカプセル化」について書きます。
「フィールドのカプセル化」 について
データを公開すると、それを所有しているオブジェクトが知らないうちに、他のオブジェクトから値を変更されたりアクセスされたりします。
データが振る舞いから分離されてしまいます。
アクセサしか持たないクラスは、オブジェクト指向の利点を真に活かしていない無意味なクラスであり、オブジェクト指向技術は単に浪費するだけの恐ろしいものになってしまいます。
例
変更前
<?php
class SampleBefore
{
public $_name;
}
変更後
<?php
class SampleAfter
{
private $_name;
public function getName()
{
return $this->_name;
}
public function setName($name)
{
$this->_name = $name;
}
}
$c1 = new SampleBefore();
$c1->_name = 'name1';
echo $c1->_name . "\n";
$c2 = new SampleAfter();
$c2->setName('name2');
echo $c2->getName() . "\n";