Catalyst 是对最近颇为流行的 MVC 模型或者说是 Ruby on rails 在 Perl 上的实现。在我看来,Perl 其实功能啥都不缺,就缺一组合。而 Catalyst 就是一个快速 Web 开发的漂亮组合拳。
M - Model, 一般用来将数据库对象化,这样能比较轻易访问和操作。Perl 中最有名的就是 Class::DBI
V - View, 就是视图,用来处理界面显示。Perl 中比较有名的是 Template-Toolkit 和 Mason
C - Controller, 就是控制器。就是针对不同的 action 或 request, 来执行不同的代码。另外有个名词就是分发/Dispatch
Catalyst 中可以使用很多不同的 Model 和 View/Template. 看个人喜好而定,我一般偏向于使用最流行的 CDBI 和 TT.
Class::DBI 和 TT 本来在 Perl 世界中就很出名。而按一般逻辑思维,视图与模型搞定后就剩下事件处理了。Catalyst 无缝地整合了这两者,而事件处理/Controller 则让我赞不绝口。
首先从目录结构上来说(运行 catalyst MyApp),略过某些东西:
created "MyApp" # 整一目录对 Controller 来讲,Catalyst 实行 URL-to-Action.
created "MyApp\lib"
created "MyApp\root" # 可以将一些静态文件放在这如 CSS/Gif/JS etc.
created "MyApp\lib\MyApp"
created "MyApp\lib\MyApp\M" # 这里就是放置 Model
created "MyApp\lib\MyApp\V" # 一般也就一个文件 TT.pm
created "MyApp\lib\MyApp\C" # 这里比较重要,所有的 Controller 都放这
created "MyApp\lib\MyApp.pm" # 主程序模块
created "MyApp/Build.PL" # 可以用来打包发布模块
created "MyApp\script" # 脚本目录
created "MyApp\script/myapp_cgi.pl" # 普通 CGI 环境下运行
created "MyApp\script/myapp_fastcgi.pl" # FastCGI
created "MyApp\script/myapp_server.pl" # 这个就是我们一般写代码要运行的脚本
created "MyApp\script/myapp_test.pl"
created "MyApp\script/myapp_create.pl" # 这个用来创建新的 C/M/V 模块
sub list : Global { # 这个 Action 自动对应类如 http://fayland:3000/list 这样的 URLsub view : Regexp('^tag/(.*)') { # 这个对应类如 http://fayland:3000/tag/Catalyst 这样的 URL
sub orderby : Local { # 这个对应 http://fayland:3000/list/orderby 这样的 URL
与 Global 不同的是它在 URL 中多了个模块名
还有其他后缀。这是个非常棒的东西。这样你就不用在一个文件中写哪个模块对应哪个子程序了(以前要用类如 CGI::Application 完成这功能)。很方便。 一般而言,把简单的 \V 和 \M 搞完后(真的很简单,里面一般一个文件十行代码就可以),剩下来的就是 Controller 的编写了。
Controller 一般子程序的第一行是 my ( $self, $c ) = @_;
评论加载中…
![]() |