我需要爲不同的「配置對象」編寫一個類,這些配置對象包含諸如「if xyz = 5 then ..」之類的內容,以便將某些規則和動作轉移到這些規則。類設計:配置對象
任何人都可以幫助我一個像這樣的類的聰明的設計?
我使用C#.NET 3.5
我需要爲不同的「配置對象」編寫一個類,這些配置對象包含諸如「if xyz = 5 then ..」之類的內容,以便將某些規則和動作轉移到這些規則。類設計:配置對象
任何人都可以幫助我一個像這樣的類的聰明的設計?
我使用C#.NET 3.5
如果你指的是規則應該映射到動作,那麼你可以有一個這樣的類:
interface IRule<T>
{
void Apply(T obj);
}
class PredicateRule<T> : IRule<T>
{
public ActionRule(Func<T, bool> p, Action<T> a)
{
this.predicate = p;
this.action = a;
}
readonly Func<T, bool> predicate;
readonly Action<T> action;
public void Apply(T obj)
{
if (this.predicate(obj))
this.action(obj);
}
}
所以,那麼你的「如果XYZ = 5的話..」規則可以聲明如下:
var r = new PredicateRule<XyzClass>(x => x == 5, x => { //then... });
不知道你是以後但卻創建對象和類似ApplyRules()方法時執行,你可以有一個重寫SetDefaults()方法來執行操作保存對象之前的操作?
+1 - 接近我要去的地方,直到你的答案彈出。我正在考慮將它們存儲在字典,動作>,這將允許您掃描一組規則並應用規則評估爲true的任何操作。 –
tvanfosson
2009-08-14 20:03:20
嘿嘿... IRule!你流口水! – 2009-08-14 20:23:45
我認爲從規則到字典中的操作的分配是一個好主意。你會宣佈一個規則和一個行動類,然後在Dict中分配它們嗎? – Kai 2009-08-15 15:52:17