执行方法全流程期间的数据验证

时间:2016-01-25 15:43:01

标签: php

这个问题没有编程语言范围。

假设我们的控制器操作或任何服务使用的函数/方法很少。

class Controller {
    function ourAction () {
        $document = $this->getDocumentFromDB();

        if (!$document) {
            throw new NotFoundException;
        }

        $this->mailer->send($document);
    }
}

class Mailer {
    function send ($document) {
        if (!$document) {
         throw \Exception('Document parameter is empty');
        }
    }
}

是否需要在 mailer-> send()中检查文档是否存在,或者由于控制器操作验证而无需检查?

1 个答案:

答案 0 :(得分:0)

我会改用类型提示:

class Mailer {
    function send (MailableDocument $document) {
    }
}

interface MailableDocument {
    //whatever document methods you use in the mailer
}

PHP会为你做脏事。

修改

无需在控制器中进行检查:

class Controller {
    function ourAction () {
        try {
            $this->mailer->send($this->getDocumentFromDB());
        } catch (\UnexpectedValueException $e) {
            throw new NotFoundException(null, null, $e); //whatever parameters it requires.
        }
    }
}

class Mailer {
    function send ($document) {
        if (!$document) {
         throw \UnexpectedValueException('Document parameter is empty');
        }
    }
}