谁来验证我的 DAO 的输入?

Posted

技术标签:

【中文标题】谁来验证我的 DAO 的输入?【英文标题】:Who is going to validate the inputs to my DAO? 【发布时间】:2012-09-14 00:24:29 【问题描述】:

我是企业设计模式的新手。我被告知数据访问对象不应该验证他们的输入。如果假设其他层执行验证,那么该层是否不需要知道所有数据库详细信息,例如表名等等?打破封装不会破坏拥有 DAO 的目的吗?

也许我对 DAO 职责的理解不正确,并且服务层也应该了解数据库,但这似乎很奇怪。目前我的数据访问对象只执行 CRUD 操作。

注意:我用的是普通的servlet,没有MVC框架或者持久化框架。

【问题讨论】:

【参考方案1】:

一个普通的 3 层应用程序有一个接口层、一个业务层和一个数据层。数据层通常是数据库的一个非常薄的覆盖层,通常不进行任何验证,除了有时它会验证 varchar 列的字符串长度。 任何业务验证(例如用户名中没有数字或密码中不允许有空格)都将在接口层(出于性能原因)和业务层中完成。 如果您在某处找到一个示例 Web 应用程序,他们应该希望能够相当清楚地展示这一点。

【讨论】:

需要数据库知识的验证怎么办,比如 ID 是否唯一,或者列输入是否属于一组允许的输入?【参考方案2】:

数据访问对象的正确实现应该只执行 crud 操作。数据库上应该存在的唯一验证是输入约束,例如唯一索引、外键、检查约束等。除此之外的所有其他内容都应由与 DAO 接口的层处理。可以设置此类约束,以便数据库服务器在检索或更新表之前自动执行它们。无需将其放入 DAO 的逻辑中。

【讨论】:

以上是关于谁来验证我的 DAO 的输入?的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate 只允许在我的 DAO 类中查询一次

单元测试 DAO

DAO 实施的最佳实践

spring boot security dao 身份验证 - 权限已删除

Java DAO 实现测试

我的Internet Explorer浏览器出了点问题..谁来帮帮我~~!!