开发者社区> 问答> 正文

关于validator位置的问题?报错

@JFinal 你好,想跟你请教个问题:老大,想请教一下问题。

controller中通过getPara()方法获取传过来的参数,但假定用户参数是不可信的,就要在每个action中都要校验一下参数,比如/article/detail/1,这个url,就需要校验数据库中是否有1的存在,1是否是正确的字段,长度,为空等等情况。

这时候如果把校验写在validator中,就需要在单独定义一个validator类,这样很不直观,而且很麻烦,一个controller类可能要对应好几个validator类。我尝试过在controller中定义validator子类,但是这样会报错,好像是不支持这种内部类。请老大指点一下该怎么办比较好一点?或者说我考虑的这种校验是否有必要?

展开
收起
爱吃鱼的程序员 2020-06-14 17:05:58 436 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    前面回复多了太乱,再开一贴来说明我的命名原则。我的原则大概分两块:

    1. Validator和Controller放一块或在Controller包名下建个validator的子包,将Validator放子包里,不显凌乱。
    2. 一般情况下Validator和Controller名取名相同,如:UserController和UserValidator。例外也有,如:LoginValidator和IndexController,这是将登录操作放索引Controller中。


    回复 @RamNight:包这样设计本来是违背设计原则的,按原则,父包不应该关联子包。由于validator子包只存放各种Validator,而无业务相关的内容,因此,这样的结构实际没有问题。回复 @糊搞:好的,多谢指教~回复 @RamNight:Login、Register两个Validator这种方式也不是最好的,应该将Login、Register分别创建Controller才正解,只是我偷懒了回复 @RamNight:看我的IndexController,它使用到了Login、Register两个Validator当一个controller中有多个action需要校验的时候该怎么办?你这种情况都是一个controller中只有一个action被校验的情况

       "......就需要校验数据库中是否有1“的存在,这种说法本身就不合适,JFinalValidator只是针对于请求时的参数,而对数据库中的数据进行判断或者操作是业务的事情,应该放在model或者业务层中。

    回复 @RamNight:2.一般情况下Validator和Controller名取名相同,如:UserController和UserValidator。例外也有,如:LoginValidator和IndexController,这是将登录操作放索引Controller中。回复 @RamNight:说命名原则分两块:1.Validator和Controller放一块或在Controller包名下建个validator的子包,将Validator放子包里,不显凌乱。回复 @糊搞:请教一下你的命名规则?回复 @RamNight:混乱!我从来没认为会混乱,而且在实际项目中也没有出现过混乱。如果你实际使用时出现了混乱,说明你在乱用。。。回复 @糊搞:但这样命名会出现问题,显得比较乱。比如有的validator可以复用,但大部分是不可以复用的,命名的话就需要同时兼顾可复用和不可复用的。因为我是这么做的才会提这样的问题,因为validator已经很乱了。
    2020-06-14 17:06:16
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载