涉及业务逻辑的验证应该写在Action层还是Service层?
对于一些类如检查null,整数验证之类的,我知道应该放在Action层。
但是涉及业务逻辑的验证应该放在哪里呢?
打个比方,论坛编辑帖子功能,在Action层验证topicId为数字,但是我们可能还要做这些验证,例如:
1.他是不是帖子作者或者帖子所属的论坛的斑竹
2.如果都不是,他是否持有修改帖子的道具,该道具是否已过期
3.他有没有被禁止修改帖子
4.他的积分与在线时长是否达到要求
类似这样的验证,每个验证都必须查数据库才能验证,且这样的验证属于业务逻辑的一部分
那么这样的验证应该写在Action层还是Service层呢?
我目前的做法是把它们放在Service层,当验证不通过时抛出异常给Action层,然后Action层接收异常后向用户展示提示语句。
但是这样的做法会导致这个问题:
有时候,程序本身也难免会有一些异常,比如数据库异常、空指针异常等等,而这些异常是不必要而且不应该向用户展示的。所以,应该对它们作出区分,业务逻辑不允许的操作,应该给用户提示,而程序的异常,应该printStackTrace。
有些人说在Action层与Service层之间加一个验证层,但是公司的程序结构是固定的,只有Action、Service、Dao三层,所以只好另想办法