1

Null オブジェクト パターン ( http://phpmaster.com/the-null-object-pattern-polymorphism-in-domain-models/ )に関するすばらしい記事を読み、既存のコードに実装することを計画しています。

私の質問は、まったく新しい「ヌルクラス」がこれを行うための最良の方法でしょうか? 以前は、コンストラクターのデフォルト値を NULL に設定していました。次に、クラスの空のシェルを作成するだけです。例えば:

class person{

    private $_personId;
    private $_name;
    private $_email;
    private $_phone;

    public function __construct($_personId, $_name, $_email, $_phone = NULL){
        //set the vars here
    }

}

次に、実際のオブジェクトが必要な場合は、次のようにします。

$person = new person(1, 'John Doe', 'doe@gmail.com');

そして、「null」オブジェクトが必要な場合は、次のようにします。

$person = new person(NULL, NULL, NULL);

このアプローチに落とし穴はありますか?

4

2 に答える 2

4

この記事で説明したパターンに従っていません。Null オブジェクトの原則は、メインのドメイン オブジェクトを拡張することです。次のようになります。

class Person {
    // atributes and methods...
}

class PersonNull extends Person {

}
于 2015-03-27T17:59:48.623 に答える
1

Factory パターンを検討することをお勧めします。つまり、渡されたパラメーターに基づいて Person オブジェクトを返すことができる Person 内にいくつかの静的メソッドを作成することです。例えば:

class Person {
 public static createWithName($name) {
   $obj = new Person();
   $obj->_name = $name;
   return $obj;
 }

 public static createWithNameAndEmail($name, $email) {
   $obj = new Person();
   $obj->_email = $name;
   $obj->_name = $email;
   return $obj;    
 }

 ....
}

/* 
   And then instead of $objPerson = new Person('Bob', null, null, null)
   you would instantiate an object like this:
*/
$objPerson = Person::createWithName('Bob')

これにより、必要なすべての検証を行うことができ、メソッド宣言を通じて有効な種類のパラメーターを文書化するのに役立ちます。ファクトリ パターンの詳細: http://phpmaster.com/understanding-the-factory-method-design-pattern/

于 2013-03-14T00:01:01.363 に答える