1

入力検証は、DB書き込みクラスではなく、別のクラスで実行する必要がありますか?それとも、ライティングクラスのメソッドである必要がありますか?

例えば。(速記版)

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
   }
}

他の考えもありがたいです、ありがとう!

4

2 に答える 2

2

バリデーターをDBWrite以外のクラスで使用できる場合、または後でバリデーターを交換したい場合は、別々のバリデータークラスとサブクラスのルートを使用します。また、実行時にさまざまなバリデーターを交換できるように、DBWriteでバリデータークラスを設定/取得するメソッドを追加することもできます。

于 2012-11-05T17:04:31.220 に答える
0

そのレベルでの検証は必要ありません。オブジェクトを保存できるか、データベースレイヤーがオブジェクトを拒否した状態になっていると、データベースの例外が発生します。

データベース自体は通常、データが適切な順序で有効であることを確認します。

ただし、オブジェクトが1つのレイヤーから別のレイヤーに渡されるたびに、作業を2倍にして検証できることを確認してください。また、両方のレイヤーで確実に実行してください。最初のレイヤーの出力側と2番目のレイヤーの入力側です。

ただし、通常は入力検証とデータベース検証のみが必要です。

入力検証とは、オブジェクトをストレージレイヤーに配置するときではなく、ストレージレイヤー内からオブジェクトを取得するときに検証することを意味します。

また、入力検証とは、当然、オブジェクトが他の入力ソースからのものである場合にオブジェクトを検証することを意味します。しかし、ここでも、保存されたときではありません。

于 2012-11-05T17:14:37.323 に答える