2011-10-24 100 views
1

我正在編寫一個使用NHibernate的應用程序,其中一個要求是爲系統創建規則,這將有效地生成SQL查詢以過濾數據。這些規則是應用程序用戶可維護的。在C#應用程序中創建數據庫獨立規則 - 規則引擎?

舉個例子,你可能有釋放訂單的規則被稱爲

ForeignOrders這將成立類似的東西訂單(業務對象)DeliveryCountry(業務對象屬性) <>英國

ExpensiveLondonAcmeOrders這將是建立像訂單(業務對象)DeliveryCity(業務對象屬性) = 倫敦訂單總金額(業務對象屬性)>東西1000 AND訂單公司名稱 = ACME

然後,當用戶發佈訂單時,他們選擇了他們想使用的規則模板,並且只會發佈符合這些條件的訂單。

業務對象和業務對象屬性的名稱緊密地反映了底層數據/域模型,但是如何在運行時能夠在用戶界面中確定並顯示這些數據,然後在本質上創建where子句SQL查詢。而且,一旦定義,您還需要將這些值存儲在數據庫中,使其與數據庫平臺無關。

理想情況下,我不想寫這個功能 - 你可以使用規則引擎來實現這樣的功能嗎?如果是這樣,哪些和昂貴的不是真正的選擇。如果不是,那麼可以使用哪些資源來掌握如何編寫這些內容。

感謝您的幫助將是非常有用的

+1

請記住,人們不習慣布爾邏輯_actually_的工作方式,通常會對SQL中'AND'和'OR'條件的工作方式感到困惑,因爲它們通常用於英語語言。 –

+1

啊,流行語的力量......規則引擎不會做你想讓他們做的事 - 它們基本上是坐落在工作流程中並應用業務規則的機器。 –

+0

我認爲我對規則引擎的理解可能不正確,因爲它不是我曾經花費很多時間的東西。我只需要知道我所描述的正確術語。 – lostinwpf

回答

1

這是值得Eric Evans的閱讀「領域驅動設計」 - 它有很多的你問的東西的交易。具體來說,埃文斯提出了規範模式(http://en.wikipedia.org/wiki/Specification_pattern) - 一種將布爾邏輯應用於對象的方式,而無需事先知道標準是什麼。

http://www.dimecasts.net/Content/WatchEpisode/139擁有的演練,還可以幫助...

+0

我是新來的,所以我不確定這是否是正確的禮節。如果是這樣,道歉。我已經考慮過使用規範模式並返回一個DetachedCriteria,如果你知道你需要在構建時包含的屬性的話,這很好。但是,在這種情況下,我們不這樣做。要在規範中包含的屬性只在運行時才知道。如何在此場景中實現規範模式? – lostinwpf

+0

你能修復你的斷鏈嗎@Neville K? – MacGyver