用Perl 来创建可重用的Web应用程序(2)

清单 1. My 类:执行关系
package My; require BaseClass; #required if BaseClass is present in BaseClass.pm @ISA=qw(BaseClass); use AnotherClass; sub new { my $package=shift; my $self=$package->SUPER::new($package); #create object in BaseClass $self->{_another_class_object}=new AnotherClass; $self; }  

执行特定的 CGI 类

Lincoln Stein 的 CGI 模块非常适合处理脚本参数,但不适合用来生成 HTML 元素(当 HTML 嵌在脚本内部时)。有意思的是,CGI 模块既能以面向函数的方式使用,也能以面向对象的方式使用,并保持了被继承的能力。例如,CGI 模块能被 CGI::Apache 和 CGI::Fast 模块所继承,它们分别是 Perl-Apache API 和 Open Market FastCGI 标准的 CGI 接口。

大多数 Web 服务器保留有它们自己的 API,该 API 执行 CGI API,并以特定的功能对其予以增强。Apache::ASP 模块(移植到 Apache Web 服务器上的 Active Server Pages)使用了五个面向 CGI 和会话管理的对象,这种管理使 CGI 脚本的编写更加容易。

对于留言簿脚本设计来说,可以使用 API 来创建一个抽象类。一个抽象类至少需要一个纯虚拟函数。在一般情况下,它可能包括 new() 构造程序函数和 get_param() 方法(没有为之定义执行程序)。它应该包括使用 CGI 所需要的所有函数: get_cookie(), set_cookie(), get_script_url(), 和甚至更为高级的函数,如 is_print_form_mode() 及 is_print_entries_mode() 。该抽象类将被特定的 API 实现所继承。因此,当类被移植到另一个 API 上时,应该创建一个继承抽象类的新类。

Perl 不直接支持抽象类。为此,我们需要用一些简单的技巧:禁止类对象的创建(让我们把类命名为 AbstractCGI ,请参阅以下清单),并定义所有的纯虚拟函数,这样在每次函数调用时就会发生错误。在这种情况下,要从抽象类中创建一个新的类,就应只继承 init () 和 get_param () 方法。新类已经含有了其它(独立于 API 的)方法。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwxjz.html