【发布时间】:2009-06-24 00:59:04
【问题描述】:
对于本示例,我有两个类,它们是针对 LINQ-to-SQL 模型类的部分类。
public partial class Foo
{
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
yield break;
}
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}
public partial class Bar
{
public bool IsValid
{
get { return (GetRuleViolations().Count() == 0); }
}
public IEnumerable<RuleViolation> GetRuleViolations()
{
yield break;
}
partial void OnValidate(ChangeAction action)
{
if (!IsValid)
throw new ApplicationException("Rule violations prevent saving");
}
}
我想排除这个功能以删除冗余逻辑。我尝试使用 IModel 接口,然后使用合约的扩展方法,但它因部分类而崩溃。
我最终得到了这个:
public class ModelBase
{
public bool IsValid
{
get
{
return this.GetRuleViolations().Count() == 0;
}
}
public void OnValidate(ChangeAction action)
{
if (!IsValid) throw new ApplicationException("Rule violations prevent saving");
}
public virtual IEnumerable<RuleViolation> GetRuleViolations() { return null; }
}
public partial class Blog : ModelBase
{
partial void OnValidate(ChangeAction action)
{
base.OnValidate(action);
}
public override IEnumerable<RuleViolation> GetRuleViolations()
{
// rules omitted
}
}
我应该以其他方式执行此操作吗?谢谢。
【问题讨论】:
标签: asp.net-mvc linq-to-sql model repository