3

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

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

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

4

2 回答 2

2

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

于 2012-09-21T14:55:25.537 回答
2

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

于 2012-09-26T23:59:44.853 回答