应该在哪里进行参数验证以避免代码重复

时间:2017-10-10 15:01:51

标签: php validation oop

我想知道这里有什么最佳做法/建议。假设我有一个类提供操作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 个答案:

答案 0 :(得分:1)

这实际上取决于您的架构的细节。最近我开始偏爱方法,看起来像这样:

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

基本上用作:

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

在这种情况下,验证实际上发生在EmailAddress类的构造函数中,如果您尝试使用非有效电子邮件地址实例化它,则会引发异常。

我认为它的一般术语是“价值对象”,但不要引用我的话。我一直在向人们借用这个,他们将DDD方法推广到编程,尽管我对整个DDD有严重怀疑(我觉得有点矫枉过正,同时引入了一些“跨层混淆”)。 p>