C# “类似易趣”的架构指南;联系我们“;“带有决策的系统”;“工作流程”;

C# “类似易趣”的架构指南;联系我们“;“带有决策的系统”;“工作流程”;,c#,asp.net,architecture,C#,Asp.net,Architecture,我正在为一个应用程序创建一个新的支持中心和“自助”客户服务模块。首席信息官非常喜欢易趣的“联系我们”页面,基本上是这样工作的: 首先,从一组主题中选择一个特定主题(例如,购买、销售、易趣帐户) 然后,根据您选择的主题,您将看到三种不同类型的信息之一(名称正是我在一些初步草图中所称的名称): “描述性”:显示富文本,其中可能包含指向应用程序其他部分的链接 “选择”:显示其他主题的列表 “操作”:允许用户查找项目并执行某些操作(例如取消) 从一些实验中,一个选项可以列表到其他选项,或者一个描述

我正在为一个应用程序创建一个新的支持中心和“自助”客户服务模块。首席信息官非常喜欢易趣的“联系我们”页面,基本上是这样工作的:

  • 首先,从一组主题中选择一个特定主题(例如,购买、销售、易趣帐户)
  • 然后,根据您选择的主题,您将看到三种不同类型的信息之一(名称正是我在一些初步草图中所称的名称):
  • “描述性”:显示富文本,其中可能包含指向应用程序其他部分的链接
  • “选择”:显示其他主题的列表
  • “操作”:允许用户查找项目并执行某些操作(例如取消)
从一些实验中,一个选项可以列表到其他选项,或者一个描述性文本块,或者一个动作部分

我正在寻找合适的架构。我选择的平台是ASP.NET(遗憾的是,WebForms;我们不想在这里接触MVC),因此“操作”区域必须是动态加载到占位符中的用户控件,但我更关心的是可能的数据库结构。我需要一种方法来知道每个主题是否指向上述三种类型中的一种,然后在页面上动态加载内容、链接列表或用户控件,这会让事情变得更棘手,而不管非技术用户是否需要更新和添加来自某种管理面板的信息


对这样做有什么建议吗?我不是在一个紧迫的最后期限,但我不能花太长时间,否则我会被认为是在浪费时间,不产生结果。

如果我个人这样做,我只会滚动一些MVC3控制器,根据需要处理工作流程步骤。然而,这似乎不适合你

使用WebFrasm,我很可能会考虑使用Windows工作流基金会来处理这个问题(学习曲线在这方面是适度陡峭的)。下面是一个使用WF的很好的例子。它是基于MVC构建的,但是您可以轻松地将return Views()替换为return UserControls

遵循这样的模型实际上会给您提供MVC模式。指挥流程的控制器非常适合工作流场景

编辑:因为这似乎是不可能的,此时您最好的选择是编写一个控制器类,手动管理流(可能是一系列状态/如果检查),然后重定向用户或返回相应的用户控件。

如果您可以以某种方式存储“知识树”,则,与自定义XML文件类似,该文件将组织所有选项/可能的操作、描述等。然后,您可以根据用户的选择“漫游”该文件,并显示相应的用户控件,其中包含根据当前XML节点的内容动态生成的内容

然后,您的“管理工具”将需要更新/修改XML文件,“公共”CMS将在ASPX表单中呈现用户控件

我参与的一个项目将此方法用于intranet的用户菜单-有效地将超链接/操作划分为多个类别的知识库,以便可以深入到。每个元素都可以包含指向其他元素的链接,因此您拥有一个类似蜘蛛网的可导航链/工作流

只需确保每个元素都有一个唯一的ID(实现起来很简单),并且始终可以通过xpath获得它


通过让用户修改“工作副本”,并在发布更改时保留live XML文件的备份,您还可以获得版本控制/回滚,这在数据库中很难做到。

您的约束是ASP.NET还是ASP.NET webforms?不幸的是,webforms。不能在这里介绍MVC。我会看一看,但老实说,我不认为我可以得到批准来引入工作流,或者引入任何新的东西(我必须竭尽全力才能获得批准来使用Linq to Sql,而不是原始的非类型化数据集+存储过程)-管理层似乎认为这是一组非常简单的页面/条件,因此我可能不得不妥协,使我的版本变得非常简单,以便能够现实地做到。听起来你这么做只是为了让自己对所有你不能做的事情感到难过。更像是希望有一种简单的方法来处理问题,我应该更清楚:)所有途径中最合适的解决方案是控制器类指令流。