8

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

例如,如果有一个 DAO 方法可以根据 user_uid 获取用户,这是一个 (> 0) 主键,那么 DAO 方法是否应该在进行必要的 DB 调用之前始终检查这个约束?或者它应该假设调用此方法的任何更高层都会处理约束并且永远不会传递-ve id?DAO 方法可以在其文档中发布此约束,以便编写更高层的程序员知道它。

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

谢谢并恭祝安康!

4

2 回答 2

7

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

于 2011-07-09T17:24:20.580 回答
5

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

一般来说,在业务层中捆绑验证是一个好主意,并限制层通信,因此只能通过业务层调用数据层。

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

于 2011-03-09T06:21:08.513 回答