如何为不同的客户定制Web应用程序(页面和UI)

时间:2012-11-14 17:51:41

标签: asp.net customization

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

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

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

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

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

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

以下内容可根据客户自定义:

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

每个客户的自定义设置在一个巨大的XML文件中,可能长达7500行。

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

2 个答案:

答案 0 :(得分:3)

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

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

很久以前,我使用了一款名为Haley Rules的产品来推动c#网络应用。它控制从可用的屏幕到出现的字段以及是否需要它们的所有内容。花了一段时间让团队了解它是如何工作的,但是一旦发生这种情况,新客户就变得非常简单。 Haley从那时起就被甲骨文吞噬了,但可能是那里绝对最好的。

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

一些商业广告包括:FlexRuleiLog

答案 1 :(得分:2)

您现有的规则引擎工具支持您的Web应用程序,这意味着它已经满足您的需求。您可以使用其他“规则引擎”,如MS工作流程,但IMO也可以以难以处理的情况结束。

假设有注册门户网站。它收集一般用户信息并将其保存到数据库中。简单。我们为一个拥有多个ASCX和Rules的客户构建了一个protal。然后,对于另一个客户,我们为这些ASCX添加了更多规则和更多控件。以这种方式工作,我们迟早会到达最后的稻草客户端。当时代码库难以维持,开发人员在许多规则中迷失了自己。这就是发生在我身上的事。

所以对我而言,这不是关于使用哪个规则引擎。

然后怎么样?

我提出了一个问题,answer中的一个对我有意义(认为不是一个选择的答案)。在这个答案中,这家伙提到了你是一家什么样的公司。在你的问题中,更像是你是哪个部门,或者你想分开你的开发团队。

如果您在archetect团队中,请使用规则引擎构建框架。创建一个基本的注册门户作为示例门户。使DAO,BO与UI分离(单独的层)。

如果您在自定义团队中,请创建自定义用户控件(不要在基本版本中重复使用这些用户控件)。您将重新创建的只是UI,您仍然可以使用DAO,BO,因为它们未在用户控件中定义,它们位于其他层。通过这种方式,您可以自由地定义客户端指定的规则,而不必担心污染其他客户规则或将新错误引入其他客户的注册。

只是意识到这不是你问题的答案。无论如何,在基于引擎规则的多客户端Web应用程序的有限xp之后,这是我的想法。