【发布时间】:2011-07-06 16:02:30
【问题描述】:
我有一个包含许多类的业务模型,该模型中的一些逻辑实体由许多不同的类(父-子-孙)组成。在这些不同的类上,我定义了不变的约束,例如,复合材料应该具有 Code 的值。
我目前让每个类都实现这样的接口......
public interface IValidatable
{
IEnumerable<ValidationError> GetErrors(string path);
}
如果未设置 Code,父级将添加一个验证错误,然后对每个子级执行 GetErrors,而该子级又会在每个孙子级上调用 GetErrors。
现在我需要为不同的操作验证不同的约束,例如
- 应始终检查某些约束,因为它们是不变的
- 当我想在根上执行操作 X 时,应该检查一些约束。
- 在执行 Y 操作时可能会检查一些额外的约束。
我曾考虑在 GetErrors 方法中添加一个“原因”参数,但出于某种原因,我无法完全确定这一点,这感觉不对。我也考虑过创建一个访问者并有一个具体的实现来验证 OperationX 和另一个 OperationY 但不喜欢这样,因为多个操作需要一些约束检查,但不是全部(例如 OperationX+OperationY 需要一个日期但不是 OperationZ),我不想复制检查的代码。
任何建议将不胜感激。
【问题讨论】:
标签: c# design-patterns