design-patterns - 在 DAO 中存储验证是个好主意吗?
问题描述
我有网络应用程序。结构:获取实体的控制器和保存实体并执行其他操作的 DAO。这是在 DAO 中检查控制器中的无状态验证(例如名称的大小)和状态验证(例如 db 中的重复电子邮件)的好主意。有没有好的做法?你能建议一些资源或书籍来获得它吗?
解决方案
在 DAO 中存储验证是个好主意吗?
不,不是。DAO - 顾名思义 - 应该仅用于从某些数据源存储/检索对象的目的。大多数验证是一种业务逻辑,因此不应该属于 DAO。
但是,由于性能问题,有时将一些业务逻辑放入 DAO 中是可以接受的。当对象检索的标准反映业务逻辑时,通常会发生这种情况。例如,要获得工资最高的夜班员工,将所有员工加载到内存中然后应用业务逻辑来查找这样的员工是非常低效的。相反,我们可以让 DAO 执行一个简单的 SQL 查询来做到这一点。
关于您的电子邮件验证示例,是的,您可以将该逻辑放入您的 DAO。但作为一种好的做法,请始终命名您的 DAO 方法,以便它们负责存储/检索对象,例如:findEmployeeByEmail(String email)
.
简而言之,将业务/验证逻辑放入 DAO 有时是可以接受的,但请尽量使其最小化。
推荐阅读
- php - 如何使用脚本找出禁用 php cookie 的原因?
- swift - Swift 4 - 如何让一个函数在该函数之外设置一个变量
- flutter - 如何从原生插件中获取 Flutter 的纹理?(颤动 => 原生。非原生 => 颤动)
- python - 使用 YAML 文件设置 GCP Cloud Logging
- python - 求和时不断更新列表
- mysql - 如何在同一个表Mysql中包含返回值0
- javascript - Chrome.notifications.create 不起作用,不抛出 lastError
- dart - flutter Bloc模式——导航器后如何访问bloc数据
- bazel - 如何将版本化目标隐藏在非版本化目标后面?
- python - Python 电子邮件接收循环