0

我们有一个难以维护的 ASP.NET Web 应用程序,我正在寻找如何重新设计它的想法。这是一个员工管理系统,可以为我们的每个客户高度定制。让我解释一下它现在是如何工作的:

在默认页面上,我们有一个菜单,用户可以在其中选择任务,例如创建员工或查看时间表。我将使用 Create Employee 作为示例。

当用户从菜单中选择 Create Employee 时,会加载一个 ASPX 页面,其中包含所选菜单项的动态加载用户控件,例如,对于 Create Employee,这将是 AddEmployee.ascx

如果用户单击控件上的保存,它将导航到默认页面。
一些菜单项涉及多个步骤,因此如果用户在多步骤流程上单击“下一步”,那么它将导航到流程中的下一页,依此类推,直到到达最后一步,单击“保存”导航到默认页面。

一些客户可能需要在创建员工流程中执行额外的步骤(例如 SecurityClearance.ascx),但其他客户可能不需要。

不同的客户可能使用相同的 ASCX 用户控件,因此在 AddEmployee.OnInit 中我们可以为该客户自定义字段,即使某些字段隐藏或只读或强制。

以下内容可根据客户进行定制:

  • 菜单项
  • 每个流程中的步骤(ascx 控件名称)
  • 每个 ascx 中的隐藏字段
  • 每个 ascx 中的必填字段
  • 与每个 ascx 相关的规则,允许在该客户的代码中使用某些逻辑

每个客户的定制都保存在一个巨大的 XML 文件中,该文件可能长达 7500 行。

是否有任何框架或规则引擎可以用来以这种方式自定义我们的应用程序?其他应用程序如何管理每个客户的定制?

4

2 回答 2

3

如果您的常规数据保存在数据库中,我不完全确定您为什么要将所有客户特定信息保存在 xml 文件中。将其移动到数据库中。

接下来,有许多不同种类的规则引擎。考虑到您使用的是 asp.net,您可能希望至少查看 Windows Workflow 中的一些内容。您可能会阅读以下内容:http: //karlreinsch.com/2010/02/05/microsoft-rule-engines/

很久以前,我使用了一款名为 Haley Rules 的产品来驱动 ac# web 应用程序。它控制着从可用屏幕到出现的字段以及是否需要它们的所有内容。让团队了解它的工作方式需要一段时间,但是一旦发生这种情况,引入一个新客户就非常简单了。海莉后来被甲骨文收购,但可能是绝对最好的。

您可能感兴趣的其他内容是NxBRE甚至nCalc。NxBRE 是一个实际的规则引擎,它是为 java 构建的一个端口。另一方面,nCalc 本身并不是一个规则引擎。但是,如果您可以用简单的布尔语句来表达您的逻辑,那么它会非常快。我目前正在使用它来驱动我们的一个应用程序中的页面流。

一些商业的包括:FlexRuleiLog

于 2012-11-14T21:07:57.853 回答
2

Your existing rule engine tool supports your web application, which means it meets your needs already. You can use other "Rule Engine" like MS work flow, but IMO it can also end with a hard to maitain situation.

Let's say there is registration portal. It collects general user infomation and save them into database. Simple. we build one protal for one client with several ASCXs and Rules.Then for another client,we add more rules and more controls to these ASCXs. Working in this way, sooner or later we will reach the final straw client. At that time the code base is hard to maitain and devs lost themselves in lots of rules. It is what happened to me.

So to me, it is not about which Rule engine to use.

Then How?

I have raised a question, and one of the answer makes sense to me( thought not a picked answer). In this answer, the guy mentioned what kind of company you are. In your question it is more like which department you are or do you want to seperate your dev teams.

If you are in a archetect teams, build a framework with a rule engine. Create a basic registraion portal as a sample portal.Make DAO,BO decoupled with UI (Seperate layers).

If you are in a customise teams, create customised user control (dont reuse these user control in basic version). What you will recreate is just UI, you can still use DAO,BO as they are not defined in user control, they are at other layers. In this way you get the freedom to define your client specified rules without worring about contaminating other clients rules or introducing new bugs to other client's registrations.

Just realise it is not like an answer to your question. Anyway it is my thoughts after limited xp of working on a engine rule based ,multi-clients web application.

于 2012-11-15T11:51:28.013 回答