我有一个在perl CGI中运行的大型Web应用程序。它运行正常,编写得很好,但是就像过去一样,所有的html都是在CGI调用中定义的硬编码,所以你可以想象,它很难保持,改进等等所以现在我想开始添加一些模板并与框架(催化剂或CGI ::应用程序)集成。我的问题是:这里有人有这样的经历吗?有什么我必须注意的事情吗?我知道使用这两个框架我可以运行原生CGI脚本,所以它很好,因为我可以同时运行这两个(CGI原生广告“框架”代码)而没有任何创伤。有什么提示吗?
答案 0 :(得分:10)
首先编写测试(例如使用Test::WWW::Mechanize
)。然后,当你改变一些东西时,你总会知道某些东西是否破裂,以及它是什么破坏了。
然后将HTML提取到模板中,并将常用的子提取到模块中。之后,切换到框架是一块蛋糕。
一般情况下,请逐步进行,以便始终拥有正常运行的应用程序。
答案 1 :(得分:4)
从CGI脚本中的处理逻辑中提取HTML。识别影响HTML输出的所有代码,因为它们是成为模板变量的候选者。将其分成HTML文件,标识的部分标有模板变量。最终,您将能够重构页面,以便在代码开始时完成所有处理,并在所有处理结束时调用HTML模板。
答案 2 :(得分:3)
在这种情况下,从头开始重写,旧代码对A)测试很有用,而B)设计细节很有用。理想情况下,您要为要复制的所有基本功能进行一组测试,或者至少进行解析最终结果页面的测试,以便您可以看到新代码为相同的输入返回相同的信息。
代码中的设计细节可能毫无用处,具体取决于框架自动处理的程度。如果你有一套很好的测试,并且直接转换效果很好,那么你就完成了。如果新的行为与旧的不符,你可能需要深入研究“为什么?”而这可能是一些奇怪的东西,乍一看没有意义。
首先要记住的一件事是,找出是否有人在你正在使用的框架中做了类似的事情。你可以节省很多时间和金钱。
答案 3 :(得分:3)
以下是我使用Python而不是Perl的方法,但这无关紧要:
我现在在这里。 :-)下一个明显的步骤当然是:
答案 4 :(得分:3)
框架的一个假设是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
。您应该评估切换成本的成本。
您可能会发现要使用旧代码作为参考平台进行完全重写。这可能比你预期的要少得多。但是,从一些玩具网站开始,感受一下您决定使用的框架/模板/模板。