2017-09-17 11 views
-1

私はStrategyパターンを使用しています。これは、インターフェイスといくつかのクラスを使用して、それを実現することを意味しています。 Factoryパターンを使用すると、インターフェイスタイプのインスタンスが作成されます。OOPを使用して一般的な検証を実装する方法は?

各クラスにはメソッドvalidate()があります。

public function validate($file) 
    { 
     $allowedFileTypes = config('app.allowedFileTypes'); 
     $maxFileSize = config('app.maxFileSize'); 

      $validator = Validator::make(
       array('file' => $file), 
       array('file' => array(
        'required', 
        'mimes:' . $allowedFileTypes . '|max:' . $maxFileSize))); 

      if ($validator->fails()) { 
       // 
      } 

     } 
    } 

これはインターフェイスで記述されたメソッドで、このメソッドはマイナーチェンジで各クラスに配置されています。だから私はDRY principleを使用し、クラスの検証コードを離そうとします。しかし、私はそれをどのような形で行うべきかわかりません:

  • 抽象検証クラスとして?
+1

[This](https://github.com/Respect/Validation)は、チェックアウトする価値のあるプロジェクトです。 – Marty

+0

問題はバリデーションを書く方法ではなく、問題はOOPとSOLIDアーキテクチャにあります – OPV

+0

私は認識しているので、それは「関連性がある」だけです。おそらく、プロジェクトの背後にあるものに特有の豊富な知識があります。 – Marty

答えて

1

を継承することができ、注射

  • やクラス、のためのサービスとして
  • 私はこれを行うには多くの方法があると思うし、単一正しい答えはありません。しかし、この関数のインスタンスが1つしかなく、$thisを参照する必要がない場合、最も適切な答えは、クラスの外にスタンドアロン関数を作成することだと思います。

    configと似たようなことをしているようですが、明らかにグローバル/シングルトン状態を使用しているように見えるため、機能には少し問題があります。

  • +0

    これをサービスとして使用しますか?私は、クラスごとに同じ検証クラスを書く必要はありません。あなたはあなたの意見を広げることができますか? – OPV

    +0

    工場ではなく抽象工場を使用することができますか? – OPV

    +0

    もう一度私の答えをお読みください。検証クラスも抽象ファクトリもファクトもありません。 – Evert

    関連する問題