我有一个很大的网络应用程序运行在perl CGI。它的运行确定,它写得很好,但因为它是过去所做的那样,所有html定义写死在CGI电话,所以你可以想像,很难向十个分量,提高和改善等。所以现在我想添加一些模板和整合的框架(催化剂或CGI::application)。我的问题是:这里的人具有经验喜欢吗?没有任何东西,我必须付出的关注?我知道,与这两个框架,我可以运行的地CGI scripts,所以这是很好的因为我可以同时运行(CGI本地广告"frameworked"编码)一起,没有任何创伤。什么建议吗?

有帮助吗?

解决方案

首先编写测试(例如使用 Test :: WWW: :机械化 )。然后,当你改变一些东西时,你总会知道某些东西是否破裂,以及它是什么破坏了。

然后将HTML提取到模板中,并将常用的子提取到模块中。之后,切换到框架是一块蛋糕。

一般情况下,请逐步进行,以便始终拥有正常运行的应用程序。

其他提示

从CGI脚本中的处理逻辑中提取HTML。识别影响HTML输出的所有代码,因为它们是成为模板变量的候选者。将其分成HTML文件,标识的部分标有模板变量。最终,您将能够重构页面,以便在代码开始时完成所有处理,并在所有处理结束时调用HTML模板。

在这种情况下,从头开始重写,旧代码对A)测试很有用,而B)设计细节很有用。理想情况下,您要为要复制的所有基本功能进行一组测试,或者至少进行解析最终结果页面的测试,以便您可以看到新代码为相同的输入返回相同的信息。

代码中的设计细节可能毫无用处,具体取决于框架自动处理的程度。如果你有一套很好的测试,并且直接转换效果很好,那么你就完成了。如果新的行为与旧行为不匹配,您可能需要深入研究“为什么?”而这可能是一些奇怪的东西,乍一看没有意义。

首先要记住的一件事是,找出是否有人在你正在使用的框架中做了类似的事情。你可以节省很多时间和金钱。

这里是怎么使用Python而不是Perl,但这不应该的问题:

  1. 分离出来和HTML 代码 为不同的文件。我用一个 模板发动机 为。
  2. 创建 功能代码 这呈现了 模板 与一组参数。
  3. 有组织的 功能 (这是我称之为 的风景, 灵感来自Django)在一个合理的方式。(管理意见,用户意见,等等。) 的 的风景 所有跟随 同样的呼吁《公约》!
  4. 重构数据库和要求的东西,这样的 的风景只有包含视特定的代码 (阅读:处理得到的,员额的请求等。但什么都没有低级别的!).在很大程度上依赖于现有的图书馆。

我在这里的时刻。:-)的一个明显步骤是的课程:

  • 写一个 调度员 这地图 网址 你的 的风景.这还将导致更好的网址并更好404和错误的处理的课程。

框架的一个假设是url映射到代码。例如,在框架中,您经常会看到以下内容:

http://app.com/docs/list
http://app.com/docs/view/123

通常虽然旧的CGI脚本不能像那样工作,但你更有可能拥有类似的东西:

http://app.com/docs.cgi?action=view&id=123

要利用该框架,您可能需要更改所有网址。无论你是否能够做到这一点,以及如何保持旧链接的运作,都可能构成你决定的很大一部分。

此外,框架还支持某种ORM(对象关系映射器),它可以抽象数据库调用,并且只允许您处理对象。对于 Catalyst ,这通常是 DBIx :: Class 。您应该评估切换成本的成本。

您可能会发现要使用旧代码作为参考平台进行完全重写。这可能比你预期的要少得多。但是,从一些玩具网站开始,感受一下您决定使用的框架/模板/模板。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top