实现前端控制器模式

时间:2015-09-18 00:20:15

标签: vbscript asp-classic front-controller

我一直试图在基于VBScript(ASP Classic)的系统上实现前端控制器几天。我来自ASP.NET MVC和Java背景,其中MVC实现很常见,主要由现有框架完成。然而,在VBScript上,这方面几乎没有做任何事情,所以这就是我自己尝试做的原因。我使用thisthis文章作为如何实施它的指南。

我起初相信我需要为每个请求定义一些常量参数,所以我创建了3:

class_command  'which command responsible to execute the correct class handler
action         'which method of the class handler to execute
action_params  'which parameters the action will need

接下来,我定义了一个用于处理请求的通用控制器处理程序:

Public Function Controller_Handler(action_params) 

它的任务是提取常量参数(class_commandactionaction_params)并处理任何错误(我稍后会添加一个过滤器来处理它)就像缺少常量参数或身份验证问题一样。

但很快我意识到了一个问题:处理程序如何知道要调用哪个命令,因为请求是一个字符串?我不能简单地使用反射将其转换为类,因为VBScript(我认为)没有反射库或内置功能。<​​/ p>

所以我想我可以像这样创建一个Switch Case

Select action_Params.Item("action_params")
  Case "command_A"
    ' Call Command A
  Case "command_B"
    ' Call Command_B
   .
   .
   .
  Case "Command_X"
    ' And so on
End Select

但这样做有点过程式。接下来我想到了创建一个XML文件,它将映射所有命令和其他东西。

所以我的问题是:考虑到VBScript限制,这是实现Front Controlller模式的好方法吗?如果没有,你能提供一个指导(希望有一些例子,甚至是简单的例子),我该怎么办?

1 个答案:

答案 0 :(得分:1)

从经典转到.net / mvc我可以分享我在经典asp中所做的事情,试图尽可能地模仿这种行为,而不会造成太多的维护问题。

  1. 在IIS中使用URL Rewrite是我的routes。我通常只做一个路由并将所有入站请求直接/重写到一个controller.asp页面以简化操作,并且没有一堆规则和控制器重定向直接在我的URL重写设置中以便于维护(对我而言)。 / p>

  2. Request.ServerVariables("HTTP_X-ORIGINAL-URL")中使用controllers.asp,您可以抓取输入的实际网址,返回类似的内容。/real/url

  3. controllers.asp中,使用Server.Execute("view1.asp")

  4. 以编程方式根据输入的网址调用视图
  5. 我有一个名为routes.asp的类文件,它包含在每个模型/类文件中,并帮助我收集URL属性oRoute.GetPath_FirstDirectory()等等。然后,模型/类文件使用此数据创建可由视图使用的属性值。在每个模型/类中使用CLASS_INITIALIZE从路径/网址填充自己,或者也可以直接在视图中完成。

  6. 在相应的视图中,我使用<!--#include file="class.asp"-->包含我的类/模型文件(如果需要),然后只需打开Set Model = new cModelClass即可初始化并开始在视图中使用它。我没有在controllers.asp中包含该类,因为在将controllers.asp用于视图时,该视图不会继承Server.Execute()中的任何变量。所以我include直接在视图中。

  7. 错误处理可以在多个级别,但理想情况下在controllers.asp。特定的错误处理通常在实际的模型/类CLASS_INITIALIZE,以避免在控制器中多余使用类,因为它已经在视图中初始化。

    现在这不是.Net mvc中的内容,但它是我提出的最好的方式,也是我最容易维护的方式。也许其他人有其他实现,但这是我的,完全基于我的经验。到目前为止,它已经做得很好。