DAO应该验证输入

shr*_*000 8 validation dao layer data-access-object

由于DAO层通常负责在给定某些输入(如user_id等)的情况下从DB访问数据,它是否应该检查其输入的有效性?

例如,如果有一个DAO方法基于user_uid获取用户,这是一个(> 0)主键,那么DAO方法是否应该在进行必要的DB调用之前检查此约束?或者它应该假设任何更高的层调用此方法将处理约束并且永远不传递-ve id?DAO方法可以在其doc中发布此约束,以便编写更高层的程序员能够意识到它.

您通常使用哪种方法?为什么?

感谢致敬!

Mr.*_*art 7

DAO层不应检查输入的有效性.在持久层中检查数据的完整性和一致性(例如:外键),并在业务层中检查"业务"相关的有效性.DAO层的唯一责任是与持久层通信以存储或检索数据.


Rus*_*ell 5

答案取决于业务层(可能在数据层之上)是否验证这些值,以及是否可以从任何其他层(例如工作流层)调用数据层.

通常,最好将业务层中的验证捆绑在一起,并限制层通信,以便只能通过业务层调用数据层.

我们还在存储过程中添加了键/空验证检查,以防将来另一个服务决定尝试将无效数据放入其中.