首頁  >  問答  >  主體

在 MVC 中,驗證放在 Controller 還是 Model 中?

本人是一名前端,剛才開始寫後台,這個問題比較困惑。是否放在Model 中,透過Model 傳回不同的狀態碼供不同控制器呼叫會好一些?大家來分享一下自己的經驗。後面附上兩個相關的連結:

http://ruby-china.org/topics/4005### ###
怪我咯怪我咯2713 天前457

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑2017-05-16 17:08:36

    曾經我也有類似的疑惑,其實大家也都說廋controller,胖model,可是為什麼廋controller就一定要胖model呢,設計的原則是什麼,就是越簡單越好,那麼胖model不就違背了我們的設計原則麼?

    所以對於這個問題,我的解決思路是,既然要減肥,那大家都減肥好了,廋controller + 廋model驗證層(我稱之為model_service) + 廋model,這樣的話,即便多個controller復用驗證層也不成問題,而model還是基本的增刪改查,並且在這個model會更加的靈活,例如常見的問題,一個model引用另一個model的增刪改查,也可以直接復用

    其實分層是一個思想,而不是說分層就一定要按照某個既定的方案死板硬套,那樣還不如不分層,既然你已經採用了分層的思想,那麼是mvc還是smvc就沒有說那個一定好,要看自己怎麼考慮自己程式是怎麼分層的,說不定你為了方便還搞出了一個xxxmvc分層設計呢,分層分層,切記一定要有能加層的設計考慮。

    記得好像網上流行一句話“計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決”,所以你會看到很多類似的概念:代理、緩存、cgi、工廠模式等等,甚至直接就來一個概念叫“中間層”,所以說當你覺得放在有聯繫的2個層中隨便哪個都好時,你可以想想是不是有一個中間層會更好呢?

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:08:36

    按我的rails經驗寫在model裡是比較好的作法

    rails中有胖controller的說法
    rails的例子:

    Person model驗證 first_name,last_name 欄位

    class Person
      include ActiveModel::Validations
    
      attr_accessor :first_name, :last_name
    
      validates_each :first_name, :last_name do |record, attr, value|
        record.errors.add attr, 'starts with z.' if value.to_s[0] == ?z
      end
    end
    

    回覆
    0
  • PHP中文网

    PHP中文网2017-05-16 17:08:36

    請參考JSR-303 Bean Validation API,另外hibernate-validation的jar函式庫也擴充了驗證標準,同樣也是寫在model裡的,使用annotation。

    回覆
    0
  • 取消回覆