在C#应用程序规则引擎中创建独立于数据库的规则?

在C#应用程序规则引擎中创建独立于数据库的规则?,c#,sql,rules,rule-engine,C#,Sql,Rules,Rule Engine,我正在使用NHibernate编写一个应用程序,其中一个要求是为系统创建规则,有效地生成SQL查询以过滤数据。这些规则是应用程序用户可维护的 例如,您可能有一个用于发布订单的规则,该规则称为 国外订单将被设置为类似订单(业务对象)交货国(业务对象属性)英国 或 ExpensiveLondonAcmeOrders将设置类似Order(业务对象)DeliveryCity(业务对象属性)=伦敦和Order TotalAmount(业务对象属性)>1000和Order CompanyName=ACME

我正在使用NHibernate编写一个应用程序,其中一个要求是为系统创建规则,有效地生成SQL查询以过滤数据。这些规则是应用程序用户可维护的

例如,您可能有一个用于发布订单的规则,该规则称为

国外订单将被设置为类似订单(业务对象)交货国(业务对象属性)英国

ExpensiveLondonAcmeOrders将设置类似Order(业务对象)DeliveryCity(业务对象属性)=伦敦和Order TotalAmount(业务对象属性)>1000和Order CompanyName=ACME

然后,当用户来发布订单时,他们选择要使用的规则模板,并且只发布符合这些条件的订单

业务对象的名称和业务对象属性紧密地反映了底层数据/域模型,但您如何才能在运行时确定并在用户界面中显示它们,然后在本质上为SQL查询创建where子句呢。此外,定义后,还需要将值存储在具有数据库平台独立性的数据库中

理想情况下,我不想编写此功能-您可以使用规则引擎实现类似的功能吗?如果是这样的话,哪一个和昂贵的不是一个真正的选择。如果没有,有哪些资源可以帮助您掌握如何编写此文档

感谢您的帮助,它将非常有用

值得一读Eric Evans的“域驱动设计”——它处理了很多您需要的东西。具体来说,Evans提出了规范模式(http://en.wikipedia.org/wiki/Specification_pattern)-一种将布尔逻辑应用于对象的方法,无需事先知道标准是什么

有一个演练可能也会有帮助…

值得一读Eric Evans的“域驱动设计”——它涉及到很多你需要的东西。具体来说,Evans提出了规范模式(http://en.wikipedia.org/wiki/Specification_pattern)-一种将布尔逻辑应用于对象的方法,无需事先知道标准是什么


有一个演练可能也会有帮助…

规则引擎不会有多大帮助。。。他们只是在工作流中应用规则


签出-另一个选项是。

规则引擎不会有多大帮助。。。他们只是在工作流中应用规则


签出-另一种选择是。

请记住,不熟悉布尔逻辑实际工作原理的人通常会对SQL中的
条件如何工作感到困惑,因为它们通常在英语中使用。啊,流行语的力量。。。规则引擎不会做你想让它们做的事情——它们基本上是位于工作流中并应用业务规则的机器。我认为我对规则引擎的理解可能是不正确的,因为我从来没有花过很多时间使用它。我只需要知道我所描述内容的正确术语。请记住,不熟悉布尔逻辑实际工作原理的人通常会对SQL中的
条件如何工作感到困惑,因为它们通常在英语中使用。啊,流行语的力量。。。规则引擎不会做你想让它们做的事情——它们基本上是位于工作流中并应用业务规则的机器。我认为我对规则引擎的理解可能是不正确的,因为我从来没有花过很多时间使用它。我只需要知道我所描述的内容的正确术语。我是新来的,所以我不确定在这里写这个是否是正确的礼仪。如果是,请道歉。我已经考虑过使用规范模式并返回DetachedCriteria,如果您知道在构建时需要包含的属性,那么这很好。然而,在这种情况下,我们没有。要包含在规范中的属性只有在运行时才知道。在这种情况下,如何实现规范模式?能否修复@Neville K的断开链接?我是新来的,所以我不确定在这里写这个是否正确。如果是,请道歉。我已经考虑过使用规范模式并返回DetachedCriteria,如果您知道在构建时需要包含的属性,那么这很好。然而,在这种情况下,我们没有。要包含在规范中的属性只有在运行时才知道。在这种情况下,如何实现规范模式?能否修复@Neville K的断开链接?