2017-10-10 7 views
-1

ベストプラクティス/推奨事項がここにありますか? XMLElementを操作する関数を提供するクラスがあるとします。コードの重複を避けるためにパラメータの妥当性検査を行うべき場所

class Foo 
{ 
    private $data; 

    public function setData(\SimpleXMLElement $data): void 
    { 
     $this->data = $data; 
    } 

    public function getElement():string 
    { 
     return $this->data->element; 
    } 
} 

クラスはそうのような他のクラスで使用されます。

class Bar 
{ 
    public function fooBar(string $data) 
    { 
     $xml = new \SimpleXMLElement($data); 
     $foo = new Foo(); 

     $foo->setData($xml); 
     echo $foo->getElement(); 
    } 
} 

setData()fooBar()の両方がそれらのパラメータを検証するべきか?

fooBar()がそのパラメータを検証しても問題ありませんか?

または、foobar()を呼び出す関数がそのパラメータを検証する必要がありますか?

答えて

1

実際には、アーキテクチャの仕様によって異なります。検証は、実際にスローEmailAddressクラスのコンストラクタで起こるこの場合

$bob = new User; 
$bob->setEmail(new EmailAddress($param)); 

:基本的には利用されている

class User { 
    // some code 
    public function setEmail(EmailAddress $email) { .... 
} 

:最近、私はこのようになりますよう、アプローチを好む始めています例外として、有効な電子メールアドレスではないものでインスタンス化しようとしている場合です。

私はそれを「価値オブジェクト」と総称していると思いますが、それについて私を引用しません。私は、DDDの全体的な疑問があるにも関わらず、DDDアプローチを一般に普及させている人々からこれを借用してきました(それは少し混乱したような気がします。

+0

したがって、Userクラスは完全にEmailAddressクラスに依存して検証を行いますか? – dev0

+0

有効な 'EmailAddress'エンティティしか作成できないという考えがあります。無効なものを作成しようとすると、例外がスローされます。これまでのところ、電子メールアドレスの検証は** User **エンティティの責任ではありません**。外部ドメイン*と問題ドメイン*です。 –

関連する問題