2

我期待在客戶端代碼中做這樣的事情我們可以使用擴展方法來構建業務規則引擎嗎?

public class ProductBiz: BizBase<Product> { 

public List<String> BrokenRules {get;set;} 

// Some kind of data + biz operation implementation 

} 

public static class ProductBizExtensions{ 

public ProductBiz Rule1(this ProductBiz prodBiz) 
{} 
public ProductBiz Rule2(this ProductBiz prodBiz) 
{} 

public bool ApplyRules (this ProductBiz prodBiz, Func<ProductBiz,bool> ruleset){} 
} 

然後用它作爲

productBiz.Rule1().Rule2(); 
productBiz.Rule2().Rule1(); 

OR

// create multicasted delegate of type Func<ProductBiz,bool> say rulesetDelegate 

productBiz.ApplyRules(rulesetDelegate); 

只想問之前,我潛入深海淹死。

什麼是這種方法潛在的缺陷???

在此先感謝

+2

有沒有在你的第一個代碼塊一個錯字?第二個Rule1實際上應該是Rule2嗎? – MusiGenesis 2009-10-07 03:09:22

+0

thanks..corrected – Perpetualcoder 2009-10-07 03:17:54

回答

2

我不知道你所說的可能是什麼意思。以這種方式編寫規則引擎當然是可能的,並且已經演示瞭如何實現這一點的大綱。

不要忘了擴展方法上的靜態方法頂部只是語法糖。詢問是否可以使用擴展方法執行X類型編程與詢問是否可以使用靜態方法執行X類型編程沒什麼區別。靜態方法看起來不太好,但它們同樣強大。

2

如果您正在尋找在運行時改變規則,那麼你可能要考慮更多的東西一樣MEF或相似。

你的解決辦法是罰款,直到您編譯,那麼它的設置並鎖定,從你的意見,你要尋找的運行時間靈活性的聲音。

+0

我有一個產品準備好發佈嗎?我剛剛在網站上看到預覽。不錯的主意 – Perpetualcoder 2009-10-07 04:50:37

2

看的業務規則CSLA http://lhotka.net/實施。在這種情況下,你可以定義一個具有特定簽名的規則,並將其添加到對象的規則存儲中,無論是在類級別還是實例級別。你試圖做什麼的語法是錯誤的,但是方法(通過在運行時執行的靜態方法來定義業務規則)正是CSLA所做的。

相關問題