Perl CGI重构原则
帝都的宇宙中心,古老文明的发源地,coding的传统在码农手中世代延续,CGI作为传承了一千多年的古老工艺,并没有被AJAX收割殆尽,仍在这里焕发着勃勃生机。--舌尖上的ABCD
背景
借着开发Stroy的机会,把一个古老的CGI脚本做了一下重构,有点心得,赶紧写下来,因为以后不太可能有机会经常接触perl的CGI了。
不想多说具体的编程规范方面的问题,如命名、注释等,虽然这些对于代码的可维护性、健壮性也非常重要,但本文主要想总结一下perl代码的功能区域、函数调用、异常处理等方面的问题。这些也谈不上架构设计,因为除了一些perl module外,其他的CGI脚本基本都是平级的,没有特别复杂的接口、模式之类的东西。
1.脚本功能内聚
CGI脚本最好按特性划分,通常一个脚本文件只实现一组相关的功能,只包含一个具体的特性。特性不宜过大,如果一个特性很大的话,可以通过目录的方式组织在一个文件夹下,每个脚本只完成一个小特性,同时修改服务器的路由配置。
2.合理的代码布局
这里指的是一个CGI脚本内部包括的内容以及它们的位置。
Perl CGI脚本通常包括shebang,use modules, 全局配置,全局变量定义以及逻辑代码,上面的顺序也应该就是脚本中代码出现的顺序,如:
#!/usr/bin/perl
# Copyright 2009-2015 ***. All rights reserved.
use CGI;
use warnings;
use strict;$| = 1; ## turn autoflush on
$ENV{"PATH"} = "/bin:/sbin:/usr/bin:/usr/sbin";
$< = $>;my $q = new CGI;
my $error = 0;
my $status = "SUCCESS";print $q->header( { -type => 'text/plain' } );
#logical code here
逻辑代码部分可能会比较复杂,因为要完成具体的业务逻辑,操作各种数据,然后返回处理结果等,内容比较多。CGI不需要main函数,全局部分的代码就相当于是main函数的代码,但是满篇位置随意的全局代码可读性非常差。建议提供一个main入口进行功能分发,其他逻辑以函数的方式被入口调用。这就要求在传入的参数中要包含行为参数,比如“operation=eat",然后使用switch(Swich模块提供)或者given(perl6内置)进行路由,当然实在不行,if...else...也可以,如:
switch ($operation)
{case "eat" { eat(); }case "walk" { walk(); }case "swim" { swim(); }else {print "I don't know what to do!"; }
}
sub swim() {while(not reach the destination) {_stroke();_kick();_breathe();}
}
3.结构化返回结果
<response><message><![CDATA[...]]></message><errorcode>$error</errorcode><status>$status</status>
</response>
4.异常处理
my $error = doSomething();
if ($error == 0) {/*normal process*/; return;}
elsif ($error == 1) {}
elsif ($error == 2) {}
...
else {}
sub _throw {my $msg = shift;my $args = \@_;my $e = sprintf($msg, @$args);die $e."\n"; # "\n"不会让die输出行号,只有你自己写的错误信息
}
sub _catch {my $e = $@;$error = -1; #这个error是给返回结果用的print "error reason ==> " . $e;
}
eval {switch ($operation){...}1;
} or _catch();
5.统一的常量定义
6.复用公共逻辑
7.执行进度显示
Perl CGI重构原则相关推荐
- Perl/CGI脚本语言编程学习资料及开发工具下载大全
Practical Extraction and Report Language Perl 最初的设计者为拉里·沃尔(Larry Wall),它于1987年12月18日发表.Perl借取了C.sed. ...
- 《重构 改善既有代码的设计 1》重构原则
/** @startTime 2020-12-16 23:22 @endTime 2020-12-16 23:59 @startPage 1 @endPage 55 @efficiency 56/1 ...
- Perl CGI简介
发信人: chenhao (努力学习), 信区: Linux 标 题: Perl CGI简介 发信站: 北大未名站 (2000年11月19日15:57:07 星期天) , 转信 Perl CGI简介 ...
- 【《重构 改善既有代码的设计》学习笔记2】重构原则
[<重构 改善既有代码的设计>学习笔记2]重构原则 本篇文章的内容来自<重构 改善既有代码的设计>一书学习笔记整理并且加上自己的浅显的思考总结! 上一篇通过一个简单的例子体验了 ...
- java代码重构原则_重构原则
重构原则 重构:对软件内部结构的一种调整,目的是在不改变软件客观察行为的前提下,提高其可理解性,降低修改成本. 何为重构 重构改进软件的设计.如果没有重构,程序的设计会逐渐腐败变质.而改进设计的一个重 ...
- perl cgi session php,如何使用Perl中的CGI :: Session处理Web会话?
我使用CGI在Perl中创建Web应用程序.此应用程序实现模型视图控制器体系结构,并且系统在根目录中具有以下结构: -楷模 -views -controllers -index.pl 文件index. ...
- 重构-改善既有代码的设计:重构原则(二)
1.什么是重构 重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性.可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化. 2.为何重构 ...
- perl CGI::Session
用于认证 eg: ligin my $session = new CGI::Session( "driver:File", $cgi, { Directory => '/tm ...
- 重构 代码重构原则 总结
重构定义 如果你发现自己需要为程序添加一个特性 而代码结构使你无法很方便地达成目的 那就先重构那个程序 使特性的添加比较容易进行 然后再添加特性 重构之前 首先检查自己是否有一套可靠的测试机制 这些测 ...
最新文章
- 买得嗨更要聊得嗨 阿里通免费电话惠战双11
- 25个好用到爆的一行 Python 代码,建议收藏
- JavaWeb实现分页的四种方法
- 香港大学顾佳涛:非自回归神经机器翻译 | 直播预告
- Ceph 的数据回填和恢复
- 单片机的引脚,你都清楚吗?
- Linux学习之ARM开发板连接ubuntu18.04LTS及NFS相关配置
- Java编程作业体会_Java作业的几点总结感想
- python docker实战_「docker实战篇」python的docker-docker镜像的创建使用dockerfile(3
- iPhone 12 Pro系列终于不怕弯了!
- perl CGI::Session
- cf500B New Year Permutation
- 【VS2010学习笔记】【编程实例】 (在Visual Studio中使用C++创建和使用DLL)
- 如何修复win7蓝牙服务器,处理Bluetooth外围设备驱动在win7中出错的修复方法
- c++实现n阶行列式计算
- The remote device or resource won't accept the connect
- K8S部署DevOps
- php极光短信验证码,极光短信验证码验证问题
- 5.3 定积分的换元积分法和分部积分法
- 【BYM】Android 实现相机快门动画,android音视频何俊林