我想知道这里有什么最佳做法/建议。假设我有一个类提供操作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()
的函数是否应验证其参数?
答案 0 :(得分:1)
这实际上取决于您的架构的细节。最近我开始偏爱方法,看起来像这样:
class User {
// some code
public function setEmail(EmailAddress $email) { ....
}
基本上用作:
$bob = new User;
$bob->setEmail(new EmailAddress($param));
在这种情况下,验证实际上发生在EmailAddress
类的构造函数中,如果您尝试使用非有效电子邮件地址实例化它,则会引发异常。
我认为它的一般术语是“价值对象”,但不要引用我的话。我一直在向人们借用这个,他们将DDD方法推广到编程,尽管我对整个DDD有严重怀疑(我觉得有点矫枉过正,同时引入了一些“跨层混淆”)。 p>