我正在使用NHibernate编写应用程序,其中一个要求是为系统创建规则,以便有效地生成SQL查询以过滤数据。这些规则是应用程序用户可维护的。
作为示例,您可能有一条规则来释放名为
的订单ForeignOrders ,可以设置类似订单 (业务对象) DeliveryCountry (业务对象属性)<>的 UK
或
ExpensiveLondonAcmeOrders 会设置类似订单 (业务对象) DeliveryCity (业务对象属性) = 伦敦 AND 订单 TotalAmount(业务对象属性)> 1000 和订单 CompanyName = ACME
然后,当用户发布订单时,他们选择了他们想要使用的规则模板,并且只会发布符合这些条件的订单。
Business Objects和Business Object Properties的名称紧密反映了底层数据/域模型,但是如何在运行时在用户界面中确定和显示这些,然后在本质上创建SQL的where子句查询。此外,一旦定义,您还需要将值存储在具有数据库平台独立性的数据库中。
理想情况下,我不想编写此功能 - 您是否可以使用规则引擎实现此类功能?如果是这样,哪些和昂贵的不是真正的选择。如果没有,可以使用哪些资源来掌握如何写这个。
感谢您的帮助,这将非常有用
答案 0 :(得分:1)
值得阅读Eric Evans的“领域驱动设计” - 它涉及很多你要求的东西。具体来说,Evans提出了规范模式(http://en.wikipedia.org/wiki/Specification_pattern) - 一种将布尔逻辑应用于对象而不事先知道条件是什么的方法。
http://www.dimecasts.net/Content/WatchEpisode/139有一个可能也有帮助的演练......
答案 1 :(得分:0)
规则引擎无济于事......他们只是在工作流程中应用规则......
结帐Dynamic Linq - 另一个选项是PredicateBuilder。