在 MVC 中,验证放在 Controller 中还是 Model 中?
怪我咯
怪我咯 2017-05-16 17:06:36
0
3
494

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

  • http://stackoverflow.com/questions/5305854/best-place-for-validation-in-model-view-controller-model
  • http://ruby-china.org/topics/4005
怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(3)
巴扎黑

曾经我也有类似的疑惑,其实大家也都说廋controller,胖model,可是为什么廋controller就一定要胖model呢,设计的原则是什么,就是越简单越好,那么胖model不就违背了我们的设计原则么?

所以对于这个问题,我的解决思路是,既然要减肥,那大家都减肥好了,廋controller + 廋model验证层(我称之为model_service) + 廋model,这样的话,即便多个controller复用验证层也不成问题,而model还是基本的增删改查,并且在这个model会更加的灵活,例如常见的问题,一个model引用另个model的增删改查,也可以直接复用

其实分层是一个思想,而不是说分层就一定要按照某个既定的方案死板硬套,那样还不如不分层,既然你已经采用了分层的思想,那么是mvc还是smvc就没有说那个一定好,要看自己怎么考虑自己程序是怎么分层的,说不定你为了方便还搞出了一个xxxmvc分层设计呢,分层分层,切记一定要有能加层的设计考虑。

记得好像网上流行一句话“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”,所以你会看到很多类似的概念:代理、缓存、cgi、工厂模式等等,甚至直接就来一个概念叫“中间层”,所以说当你觉得放在有联系的2个层中随便哪个都好时,你可以想想是不是有一个中间层会更好呢?

给我你的怀抱

按我的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
Ty80

请参考JSR-303 Bean Validation API,另外hibernate-validation的jar库也扩展了验证标准,同样也是写在model里的,使用annotation。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板