use*_*820 5 java design-patterns
我有一个模拟 FK 关系的课程。它有 2 个列表。这些列表分别包含父表和子表的列名称。这些清单是客户传给我的。现在,在创建 FK 对象之前,我认为有必要进行以下检查(按顺序):
所以你可以看到总共有 7 个检查。这么多支票可以吗?
如果可以进行这么多检查,是否有任何模式可以处理此类情况(具有大量验证检查)?
如果不行的话我该怎么办?我是否应该将这些条件记录为合同的一部分,并提及如果违反此合同,API 将产生无意义的结果?
编辑:基本上,我试图获取这两个列表并生成特定于数据库的查询。因此,正确构建该对象非常重要。
正如大家所说,这取决于你。对此没有这样的固定/标准指南。但为了简单起见,您必须将所有验证逻辑放在一处,以便它保持可读且易于更改。
正如您所说,一个建议可能是您的所有验证逻辑似乎都非常面向业务。我的意思是最终用户不应该担心您的数据库配置。假设您的类名称为 FKEntity。因此,如果您遵循实体概念,那么您可以将验证逻辑放入 FKEntity.validate() (实现 Validatable 接口)中,这将验证特定实体...这适用于适用于所有 FKEntity 类型对象的验证逻辑以同样的方式。如果您需要任何验证逻辑来比较/处理相互依赖的不同 FKEntity(例如,如果有一个 FKEntity 具有某个值“x”,那么没有其他实体可以将“x”作为其值,如果有,那么您可以不允许整个实体列表持久化),那么你可以将逻辑放在你的Service层中。
Inteface Validatable { void validate() throws InvalidEntityException; }
Class FKEntity implements Validatable {
//..
public void validate() throws InvalidEntityException {
//your entity specific logic
}
}
Class FKDigestService {
public digestEntities() {
try {
for(FKEntity e : entityList)
e.validate();
//your collective validation logic goes here
} catch (EntityValidationException e) {//do whatever you want}
}
}
Run Code Online (Sandbox Code Playgroud)
这会给你带来两个好处,
您的实体特定验证逻辑保存在一个位置(尝试将大部分逻辑视为实体特定逻辑)
您的集体逻辑与实体逻辑分开,因为您不能将这些逻辑放入您的实体中,因为这些逻辑仅适用于存在 FKEntity 集合的情况,而不适用于单个实体......它是业务逻辑,而不是验证逻辑
| 归档时间: |
|
| 查看次数: |
856 次 |
| 最近记录: |