【发布时间】:2011-05-04 09:19:48
【问题描述】:
public interface IRule
{
bool Check(string input);
}
我有一个定义规则的接口。规则只是用户可以创建的通用业务规则或约束。所以我有两个示例规则:
public class ContainsRule : IRule
{
public string MustContain { get; set; }
public bool Check(string input)
{
return input.Contains(this.MustContain);
}
}
public class LengthRule : IRule
{
public int MaxLength { get; set; }
public bool Check(string input)
{
return input.Length <= this.MaxLength;
}
}
规则可能有多个可以设置的属性,但在此示例中,这些规则中的每一个都只有一个属性。
用户可以创建自己的应保存的规则集。例如,一个用户有这三个规则:
IRule[] rules = new IRule[]
{
new ContainsRule { MustContain = "foo" },
new ContainsRule { MustContain = "bar" },
new LengthRule { MaxLength = 5}
};
我需要为每个用户将这些信息保存到数据库或某个数据存储中。由于每个用户都可以有自己的一套规则,我不确定数据库表应该是什么样子。
User | ClassName | Parameters
-----------------------------------------------
1 | Namespace.ContainsRule | MustContain:foo
1 | Namespace.ContainsRule | MustContain:bar
1 | Namespace.LengthRule | MaxLength:5
我最初的猜测是创建一个类似于上面的表,其中参数应该是一个字符串。这意味着我需要解析信息并使用反射或其他东西来设置属性。我需要使用激活器来使用 ClassName 列创建类。另一个建议是不要为所有属性创建一个分隔字符串,而应该有另一个表。每个属性都是它自己的行,与上表中的一行有外键关系。
但是,这两个示例似乎都不是保存这些规则的最佳方式。有一个更好的方法吗?
【问题讨论】: