什么是最好的办法迁移CGI一个框架?
-
02-07-2019 - |
题
我有一个很大的网络应用程序运行在perl CGI。它的运行确定,它写得很好,但因为它是过去所做的那样,所有html定义写死在CGI电话,所以你可以想像,很难向十个分量,提高和改善等。所以现在我想添加一些模板和整合的框架(催化剂或CGI::application)。我的问题是:这里的人具有经验喜欢吗?没有任何东西,我必须付出的关注?我知道,与这两个框架,我可以运行的地CGI scripts,所以这是很好的因为我可以同时运行(CGI本地广告"frameworked"编码)一起,没有任何创伤。什么建议吗?
解决方案
首先编写测试(例如使用 Test :: WWW: :机械化代码>
)。然后,当你改变一些东西时,你总会知道某些东西是否破裂,以及它是什么破坏了。
然后将HTML提取到模板中,并将常用的子提取到模块中。之后,切换到框架是一块蛋糕。
一般情况下,请逐步进行,以便始终拥有正常运行的应用程序。
其他提示
从CGI脚本中的处理逻辑中提取HTML。识别影响HTML输出的所有代码,因为它们是成为模板变量的候选者。将其分成HTML文件,标识的部分标有模板变量。最终,您将能够重构页面,以便在代码开始时完成所有处理,并在所有处理结束时调用HTML模板。
在这种情况下,从头开始重写,旧代码对A)测试很有用,而B)设计细节很有用。理想情况下,您要为要复制的所有基本功能进行一组测试,或者至少进行解析最终结果页面的测试,以便您可以看到新代码为相同的输入返回相同的信息。
代码中的设计细节可能毫无用处,具体取决于框架自动处理的程度。如果你有一套很好的测试,并且直接转换效果很好,那么你就完成了。如果新的行为与旧行为不匹配,您可能需要深入研究“为什么?”而这可能是一些奇怪的东西,乍一看没有意义。
首先要记住的一件事是,找出是否有人在你正在使用的框架中做了类似的事情。你可以节省很多时间和金钱。
这里是怎么使用Python而不是Perl,但这不应该的问题:
- 分离出来和HTML 代码 为不同的文件。我用一个 模板发动机 为。
- 创建 功能 从 代码 这呈现了 模板 与一组参数。
- 有组织的 功能 (这是我称之为 的风景, 灵感来自Django)在一个合理的方式。(管理意见,用户意见,等等。) 的 的风景 所有跟随 同样的呼吁《公约》!
- 重构数据库和要求的东西,这样的 的风景 会 只有包含视特定的代码 (阅读:处理得到的,员额的请求等。但什么都没有低级别的!).在很大程度上依赖于现有的图书馆。
我在这里的时刻。:-)的一个明显步骤是的课程:
- 写一个 调度员 这地图 网址 你的 的风景.这还将导致更好的网址并更好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
。您应该评估切换成本的成本。
您可能会发现要使用旧代码作为参考平台进行完全重写。这可能比你预期的要少得多。但是,从一些玩具网站开始,感受一下您决定使用的框架/模板/模板。