2017-09-17 21 views
-1

我使用戰略模式,這意味着使用接口和一些類,實現它。在使用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

我認爲有很多方法可以做到這一點,有沒有一個唯一正確的答案。如果這個函數只有一個實例,並且不需要引用$this,那麼我認爲最正確的答案是在類之外創建一個獨立的函數。

它看起來像你正在做類似config類似的東西,雖然我覺得這個函數有點問題,因爲它似乎使用全局/單態的狀態。

+0

並將其用作服務?我不想爲每個類編寫相同的驗證類。你能延續你的意見嗎? – OPV

+0

可能會使用抽象工廠而不是工廠? – OPV

+0

請再次閱讀我的答案,我建議*不要*使用任何類爲此。所以沒有驗證類,沒有抽象工廠,沒有工廠。 – Evert

相關問題