谁将验证我的DAO的输入?

时间:2012-09-21 14:50:37

标签: java-ee dao

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

也许我对DAO责任的理解是关闭的,服务层也假设知道数据库,但这看起来很奇怪。目前,我的数据访问对象仅执行CRUD操作。

注意:我正在使用普通的servlet,没有MVC框架或持久性框架。

2 个答案:

答案 0 :(得分:2)

普通的3层应用程序具有接口层,业务层和数据层。数据层通常是数据库上的一个非常薄的封面,除了有时它将验证varchar列的字符串长度之外,通常不进行任何验证。
任何业务验证(例如没有用户名中的数字或不允许密码中的空格)都将在接口层(出于性能原因)和业务层中完成。 如果你在某个地方找到一个示例Web应用程序,他们应该可以非常清楚地证明这一点。

答案 1 :(得分:2)

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