在单独的类中验证,还是作为编写器类的方法?

时间:2012-11-05 17:02:18

标签: php oop validation

输入验证应该使用单独的类,而不是DB写入类吗?或者它应该是写作课的方法吗?

EG。 (简写版)

class DBWrite {

   public function add($input) {
       $data = new Validator($input);
       if($data->isValid() == true) {
           // write to DB
       }
   }

}

或者将验证作为DBWrite类的一部分会更好吗?或者在关注点分离(或其他方面)方面是否存在太多违规行为?

class DBWrite {

   public function add($input) {
       if($this->inputIsValid() == true) {
           // write to DB
       }
   }

   private function inputIsValid() {
       // Check that input is valid and return true if it is
   }
}

任何其他想法也将不胜感激,谢谢!

2 个答案:

答案 0 :(得分:2)

如果Validator可以在DBWrite以外的其他类中使用,或者稍后您可能想要在以后交换验证器,我会选择单独的Validator类和子类的路径。您可能还想在DBWrite中添加一个设置/获取验证器类的方法,以便在运行时交换不同的验证器。

答案 1 :(得分:0)

您不需要在该级别进行验证。对象可以存储,也可以处于数据库层拒绝它的状态 - 然后您将看到数据库异常。

数据库本身通常会注意数据的正确顺序和有效性。

但是确保每次将对象从一个层传递到另一个层时,您可以将工作加倍并验证 - 并确保在两个层上执行此操作:在第一层的输出端和第二层的输入端层

但通常只需输入验证和数据库验证。

输入验证意味着您在对象来自存储层时验证对象,而不是在将对象放入存储层时验证对象。

此外,输入验证自然意味着您在来自其他输入源时验证对象。但在这里,不是在存储时。