2012-06-03 48 views
11

我應該使用哪種框架/設計模式,可能有1000個以上的biz規則驗證?業務規則驗證的框架/設計模式

我正在使用的系統類型包含許多允許用戶輸入的輸入表單。每個輸入表單都有不同的部分。

即形式A具有部分A/B/C/D。表格B包含B/C/D部分

這些biz規則驗證中的一部分對於這兩種形式都是通用的,我正在研究重用規則的方法。

如何建立一個強大的業務規則驗證框架?

+0

這是一個太寬泛的問題..你有什麼想法? –

+1

1000個驗證或1000個規則?規則有多複雜?他們多久更換一次?他們需要多快改變?變化是否具有追溯性? – meriton

+0

規則和驗證的組合。他們幾乎不會改變,因爲我需要向用戶返回錯誤消息。 – youcanlearnanything

回答

14
+0

當您提到「將每條規則實施爲單獨策略」時,希望您不要爲OP提及的1000個驗證中的每一個建議策略類。那會是一個相當類的爆炸,對吧?或者,也許您正在引用每個規則的單獨的類實例。 – Brady

+1

@布雷迪:實際上,我**做**意味着一個單獨的規則類。然後,每個規則可以有一個名稱,進行單元測試並放置在有意義的包中。也可能有一些規則可以基因化,這樣一個具有不同設置的類可以用於多個規則。最後類在[tag:scala]和[tag:groovy]等語言中很便宜(帶有代碼行)。什麼是替代方案?一個包含數千行規則代碼的類(假設一條規則可以容納1-2行?) –

+0

Tomasz,我明白你的觀點,我會認爲你提到的組合最好,特別是將許多規則概括爲一個或幾個班。當然,我不希望看到一個混亂的班級,但在另一側,我不認爲1000個班級會是最佳的。 – Brady

5

一個很好的模式來實現業務規則是Specification pattern。這是策略,複合的組合,可以使參數化和易於組合的規則。請務必查看Fowler和Evans的original paper (pdf),如果可以,請參閱域名驅動設計

+1

對於每個規則,我需要返回相應的錯誤消息。規範模式如何提供幫助? – youcanlearnanything

+0

錯誤消息也可以從規範方法返回,並附帶一個成功標誌。你可以將它們打包在一個「操作結果」類中,並從'isSatisfied'方法中返回。 –

+0

創建另一個OperationResult類,該類可能有一個包含所有相應消息的列表? – youcanlearnanything