2017-10-10 7 views
-1

Je me demande quelles sont les meilleures pratiques/recommandations ici. Supposons que j'ai une classe fournissant des fonctions manipulant un XMLElement.Où la validation des paramètres devrait-elle avoir lieu pour éviter la duplication du code

class Foo 
{ 
    private $data; 

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

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

La classe est utilisée dans une autre classe comme ceci:

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

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

Si les deux setData() et fooBar() valider leurs paramètres?

Ou est-ce OK si seulement fooBar() valide son paramètre?

Ou la fonction appelant foobar() doit-elle valider son paramètre?

Répondre

1

Cela dépend en fait des spécificités de votre architecture. Dernièrement, j'ai commencé à favoriser l'approche, qui ressemble à ceci:

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

qui est essentiellement utilisé comme:

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

Dans ce cas, la validation se fait dans le constructeur de la classe EmailAddress, qui lance une exception, si vous essayez de l'instancier avec quelque chose qui n'est pas une adresse e-mail valide.

Je pense que le terme général pour cela est "objets de valeur", mais ne me citez pas là-dessus. Je l'ai emprunté à des gens qui popularisent l'approche DDD de la programmation, même si j'ai de sérieux doutes sur DDD dans son ensemble (cela me semble un peu exagéré, tout en introduisant une «confusion transversale»).

+0

Donc la classe User dépend entièrement de la classe EmailAddress pour faire la validation? – dev0

+0

L'idée serait que vous ne pouvez créer qu'une entité 'EmailAddress 'valide. Si vous tentez d'en créer un invalide, il déclenche une exception. Cela se résume à ceci: la validation de l'adresse email n'est pas une responsabilité de l'entité utilisateur. C'est et externe * problème domaine *. –