每个客户定制的业务规则......(asp.net mvc)

时间:2009-10-22 23:42:19

标签: c# asp.net asp.net-mvc workflow mef

在我正在处理的Web应用程序中,项目可以通过多个状态(例如工作流程),并且在每个工作流程之后,可以在每个步骤之后运行规则,这可以停止进程或显示其他消息。

如何定义这些规则? 我正在考虑每个规则的dll(并使用MEF或事件将它们连接起来),但是一个应用程序可以拥有200-300个客户,每个客户都有一些规则会变成很多dll。

更新
这些规则可能如下所示。假设你提交了一张发票,但是如果你的批准者超过一定金额,你只想要批准它,那么会调用这样的规则来返回true或false,然后相应地继续。

干杯。

4 个答案:

答案 0 :(得分:1)

听起来像应用程序可能会受益于使用动态语言(如Ruby或Python)编写的业务规则。 IronPython与使用C#或VB.NET编写的应用程序很好地集成。您可以在Web应用程序中创建DLR ScriptEngine和ScriptScope,根据客户端ID参数注入以动态语言编写的规则,以与您的Live Plain .NET Objects(PONO)进行交互。您可以将数百个规则保存在数据库中,因为它们只是文本(例如Python源代码)。查看我编写的this blog post,其中显示了如何将动态业务规则注入.NET应用程序。

答案 1 :(得分:0)

这可能是.Net Workflow Foundation

的合适人选

答案 2 :(得分:0)

假设您的工作流引擎是数据库驱动的,您可以通过添加公司ID字段来区分工作流定义。您将不得不在涉及的任何工作流程中实现此功能,检查公司ID是什么,并相应地加载工作流程。您还必须分别为每个公司ID创建工作流程。

这听起来很乏味,但实际上很简单,很容易做对。

然后,您可以进一步定义哪个用户使用哪个公司ID。或者,如果您确定每个用户将使用不同的工作流程包,则可以使用用户ID而不是中间公司ID。

答案 3 :(得分:0)

我发现这篇文章中链接的内容对多客户系统来说是一个有趣的读物:

http://ayende.com/Blog/archive/2008/08/13/Mutli-Tenancy--multi-tenant-apps-and-frameworks.aspx