【问题标题】:Customised business rules per customer...(asp.net mvc)每个客户定制的业务规则...(asp.net mvc)
【发布时间】:2009-10-22 23:42:19
【问题描述】:

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

应该如何定义这些规则? 我在考虑每条规则一个 dll(并将它们与 MEF 或事件挂钩),但一个应用程序可能有 200-300 个客户,每个客户都有一些规则,这些规则会变成很多 dll。

更新:
这些规则可能如下所示。假设您提交了一张发票,但您只想在其超过一定金额时从您的批准人那里授权,然后会调用这样的规则来返回 true 或 false,然后进行相应的处理。

干杯。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • @Schotime,在不知道这些“规则”实际上是什么的情况下,很难猜测实现它们的最佳方式是什么。但我真的怀疑是否需要结合多种语言来实现这一目标。
    • 是的。我只是提供一个建议。 CLR 和 DLR 之间的集成程度令人惊叹。使用 .NET 4.0 中的 CallSite 缓存,性能非常出色。不再需要害怕 Python 和 Ruby。而用 Python 编写业务规则是一种愉快的体验。同样,只是向 Schotime 提供想法。
    【解决方案2】:

    这可能是.Net Workflow Foundation 的一个很好的候选者

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        我发现这篇文章中链接的内容是关于多客户系统的有趣读物:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-10-28
          • 1970-01-01
          • 2018-07-02
          • 2013-03-02
          • 1970-01-01
          • 2015-09-17
          • 2015-11-29
          相关资源
          最近更新 更多