NoahWeb
在线搜索
NoahWeb.net | 开发者交流中心 | 支持 | 文档 | 反馈缺陷 

模组(Module)

  如果说一个Action是实现某种功能的一个模块的话,那么这里的“模组”(Module)则更像是我们大家非常了解的面向对象编程思想中的“方法”。但是在NoahWeb并没有把它简单的使用“方法”这一词,因为NoahWeb中的模组是用来封装一段逻辑后的执行过程后在表现层与逻辑层实现调用的。你可以创建一个“模组”(Module),在需要的地方反复使用,而且无论在表现层或是逻辑层它的执行效果都是一样。

  当你配置好名称空间后,在它的config文件夹中会看到几个文件。其中有一个叫做Module.xml.config的文件,这就是你的Module文件。把它打开,我们来看看。如下图

  第一行是xml的头,对xml语言有所了解的话一定不会陌生。接下来的一句是名称空间的声明,本例中的Modules NameSpace="manager"是指当前的名称空间为“manager”,我们在这里所写的每个Module都属于该名称空间之下。接下来,我们看一看什么是Module,如下图

  你可以这样认为,你在action中能做的一切,在这里都可以做,比如逻辑判断,调用数据库查询集等等。本例中,我们声明了一个叫做checksession的Module,所作的是一个简单的逻辑判断,从代码中我们可以看到,如果_SESSION.myloginname中的值为null的话,系统会跳转到http://localhost/demo/demo.aspx这个地址,也就是本页面,并且执行一个叫做nosession的action。
  我们回到action中看一看,当用户成功登录后,系统会将用户名,ID,密码等等存到_SESSION变量中。如下图

  在这里,我们可以用先前声明的这个叫做checksession的Module来调用这个_SESSION变量。

  如上面所说一样,当用户成功登录之后,才会将用户名等等相关信息存到_SESSION变量中,这是由Action中的逻辑判断来实现的。那么,如果用户没有成功登录,_SESSION变量中就会是NULL,这就符合了checksession这个Module中的判断,系统就会http://localhost/demo/demo.aspx这个地址,也就是本页面,并且执行一个叫做nosession的action。我们回到Action中看一看它做了些什么。如下图

这个Action中打印了两个字符资源。我们去看一看。如下图

 

 

  其中,nosession在屏幕中显示了一段文字和一个链接,而nosessionjumpframe则将主页面中各个显示区的Action都进行了清空。
  这个叫做checksession的Module是如何使用呢?我们到Action中看一看。如下图

  我们在SETMYPASS这个Action中加入了这个Module,也就是说,当系统执行这个动作的时候,会执行这个Module,进行上面谈到的那些逻辑判断。
  如果用户是完全正常的登录后来执行SETMYPASS这个动作的话,是感觉不到这个Module的。但是,如果用户并非正常登录,而是通过在地址栏中直接输入Action名进行操作的话,这个Module就发生作用了。如下图



  这是用户正常登录后的执行结果,我们可以看到,这个叫做checksession的Module并没有发生作用。但是,如果我们新开一个IE并且在地址栏中直接输入上图中红圈部分的地址的话,如下图

 

  我们看到了,系统执行了这个叫做checksession的Module,并且自动跳转到了叫做nosession的action。由此我们可以看出,本例中的这个这个叫做checksession的Module是用来控制系统安全性的。当然,Module的作用远不只如此。

  可能你现在还是不明白上面说的和Module有什么关系,没错,Module能做的action都可以做到。你完全可以把那个Module中的代码直接放在你需要的action中,但是你想过吗?那样一来,如果你在action的很多地方都用到了这些代码的话,你的代码量就会增加很多,如果使用Module的方式,将这些代码封装起来,调用时调用Module名称,不仅有效的降低了代码量,而且降低了维护时的工作量。这样吧,请看看下面这张图,也是个Module

  如果你的action中有很多地方都需要这样的逻辑的话, 想想看,如果每次使用时都把这么多的代码直接放在action中,代码量将会大大增加,你可以将那些可能需要调用多次的逻辑封装成为Module,这会为你带来帮助的。

  当在表现层调用这个Moudle时,可以使用

<!-- Noah ModuleLinkId="checkactionpurview" -->

的方式来进行调用。同样可以达到同逻辑层调用一样的效果。在表现层中,你可以发挥允许调用Module的特点,把常常用到的查询结果或是对特点变量的检测甚至是分页的算法放入Module,从而实现重用。

 

 

 

查看NoahWeb在线手册

Copyright © 2001-2004 The NoahWeb Corporation
All rights reserved.