首页  >  问答  >  正文

在 MVC 中,验证放在 Controller 中还是 Model 中?

本人是一名前端,刚才开始写后台,这个问题比较困惑。是否放在Model 中,通过Model 返回不同的状态码供不同控制器调用会好一些?大家来分享一下自己的经验吧。后面附上两个相关的链接:

怪我咯怪我咯2713 天前462

全部回复(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中有胖model,瘦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
  • 取消回复