質問

iには、perl CGIで実行されている大きなWebアプリケーションがあります。正常に動作し、よく書かれていますが、過去に行われたように、すべてのhtmlはCGI呼び出しでハードコーディングされて定義されているため、想像できるように、維持、改善などが困難です。テンプレートを追加して、フレームワーク(触媒またはCGI :: application)と統合します。私の質問は、ここの誰かがそのような経験を持っていますか?注意が必要なことはありますか?私は両方のフレームワークでネイティブCGIスクリプトを実行できることを認識しています。トラウマなしで両方(CGIネイティブ広告" frameworked"コード)を一緒に実行できるので良いです。ヒントはありますか?

役に立ちましたか?

解決

最初にテストを記述します(たとえば、 Test :: WWW: :メカニズム )。そして、物事を変更するとき、何かが壊れているかどうか、そしてそれが何が壊れているかを常に知っています。

次に、HTMLをテンプレートに抽出し、一般的に使用されるサブをモジュールに抽出します。その後、フレームワークに切り替えるのは簡単です。

一般的に、常に機能するアプリケーションを使用できるように、一歩ずつ進みます。

他のヒント

CGIスクリプトの処理ロジックからHTMLを抽出します。これらはテンプレート変数になる候補であるため、HTML出力に影響するすべてのコードを特定します。それをHTMLファイルに分離し、識別された部分にテンプレート変数でマークを付けます。最終的には、すべての処理がコードの開始時に行われ、HTMLテンプレートがすべての処理の終了時に呼び出されるように、ページをリファクタリングできます。

基本的にゼロから書き直すこの種の状況では、古いコードはA)テスト、B)設計の詳細に役立ちます。理想的には、レプリケートするすべての基本機能について一連のテストを行うか、少なくとも最終結果ページを解析して新しいコードが同じ入力に対して同じ情報を返していることを確認できるテストを行います。

フレームワークが自動的に処理する量によっては、コード内の設計の詳細は役に立たない場合があります。適切なテストセットがあり、簡単な変換が適切に機能する場合は、これで完了です。新しい振る舞いが古い振る舞いと一致しない場合、おそらく「なぜ?」をより深く掘り下げる必要があります。おそらく一見すると意味がありませんが、奇妙に見えるかもしれません。

最初に覚えておくべきことの1つは、使用しているフレームワークで誰かが似たようなものを作成したかどうかを調べることです。時間とお金を大幅に節約できます。

Perlの代わりにPythonを使用して行った方法を次に示しますが、それは問題ではありません。

  1. HTMLと code を個別のファイルに分離しました。そのためにテンプレートエンジンを使用しました。
  2. パラメータのセットで template をレンダリングした code から関数を作成しました。
  3. 関数(私は views と呼び、Djangoに触発された)を賢明な方法で整理しました。 (管理ビュー、ユーザービューなど)ビューはすべて、同じ呼び出し規約に従っています!
  4. データベースをリファクタリングして、ビュービュー固有のコードのみが含まれるようにします(読み取り:GET、POSTリクエストなどを処理しますが、低レベルはありません) !)。そのために既存のライブラリに大きく依存していました。

私は今ここにいます。 :-)次の明らかなステップはもちろんです:

  • URL views にマップするディスパッチャを作成します。これにより、URLが改善され、404およびエラー処理も改善されます。

フレームワークが行う前提の1つは、URLがコードにマップされることです。たとえば、フレームワークでは、次のことがよく表示されます。

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

通常、古いCGIスクリプトはそのようには機能しませんが、次のようなものを持っている可能性が高くなります。

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

フレームワークを利用するには、すべてのURLを変更する必要があります。これを行うことができるかどうか、および古いリンクを機能させる方法は、決定の大きな部分を占める可能性があります。

また、フレームワークは、データベース呼び出しを抽象化し、オブジェクトのみを処理できる、何らかのORM(オブジェクトリレーショナルマッパー)のサポートを提供します。 Catalyst の場合、これは通常 DBIx :: Class 。これに切り替えるコストを評価する必要があります。

おそらく、古いコードをリファレンスプラットフォームとして、完全に書き直したいと思うでしょう。これは予想よりはるかに少ない作業です。ただし、いくつかのおもちゃのサイトから始めて、どのフレームワーク/ orm /テンプレートを使用するかを判断してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top