5

ASP クラシック プロジェクトのコードベースに慣れるのが本当に困難になっていることの 1 つは、インクルード ファイルの状況が混乱していることです。探していた関数が、まったく関係のないインクルード ファイルに含まれていることがあります。関数を見つける必要がある場合に関数がどこにあるかをより簡単に判断できるように、これをリファクタリングする方法について誰かアドバイスはありますか?

編集:私が尋ねるのを忘れたことの1つは、vbscriptには、ファイルが2回含まれるのを防ぐためのメカニズムがありますか? C の #ifndef のようなものですか?

4

6 に答える 6

14

従来のASPアプリケーションを引き継ぐときにできる基本的なことはいくつかありますが、おそらくそれらを実行したことを後悔することになります。

  1. 重複するインクルードファイルを排除します。私が今まで見たすべての古典的なASPアプリには、5つの「login.asp」ページと7つの「datepicker.js」ファイルなどがあります。重複をすべて探して削除し、必要に応じてアプリの残りの部分で参照を変更します。ファイルを削除するときは、各ファイルの差分チェックを慎重に行ってください。元の作成者がファイルをコピーしてからコピーだけを変更したため、複製されたファイルにはわずかな違いがあることがよくあります。これはEvolutionにとっては素晴らしいことですが、コードにとってはそれほどでもありません。
  2. 合理的なフォルダ構造を作成し、すべてのファイルをその中に移動します。これは明らかですが、これはあなたが最も後悔するものです。アプリケーション内のリンクが相対的であろうと絶対的であろうと、それらのほとんどを変更する必要があります。
  3. すべてのインクルードファイルを1つの大きなファイルに結合します。次に、すべての関数を論理的に並べ替えて、適切な名前の個別のファイルに分割できます。次に、アプリをページごとに調べて、各ページのincludeステートメントが何である必要があるかを理解する必要があります(または1つのファイルに固執し、すべてのページに含めるだけです-かどうかは思い出せませんこれはASPでは良い考えです)。ここに含まれる問題のレベルを理解することはできません。これは、既存のインクルードファイルが同じ名前のグローバルを多用していないことを前提としています。

私はこれを何もしません。Steve Yegge(私は思う)を言い換えると、「完全な書き直しで修正できない従来のASPアプリケーションには何の問題もありません」。私はこれについて非常に真剣に取り組んでいます。この世界では、ASPアプリを維持することほどプログラマーの時間の無駄はないと思います。また、ASPが古くなるにつれて、問題はさらに悪化します。

于 2008-09-27T15:19:59.340 に答える
10

@ MusiGenisisの箇条書きリストは従うべき良いアドバイスですが、私は同意しません-

「私はこれを何もしません。スティーブ・エッゲ(私は思う)を言い換えると、「完全な書き直しで修正できない古典的なASPアプリケーションには何の問題もありません」。私はこれについて非常に真剣です-私はしませんASPアプリを維持することよりも、この世界でプログラマーの時間の無駄が大きいとは思わないでください。ASPが古くなるにつれて、問題はさらに悪化します。」

すべて非常にうまくいきますが、それがかなりのレガシーアプリである場合、開発者の時間/リソースが不足しているため、完全な書き換えを行うことはしばしば不可能です。

かなり大きなクラシックASPアプリがあり、これは何年にもわたって腕と脚を伸ばしてきました。きれいではありませんが、ビジネスニーズに対応しています。次の6か月間、完全な書き直しを行う時間はありません。それは素晴らしいことですが、不可能です。私たちのアプローチは-

  1. 新しい機能が必要な場合は、ASP.NETに実装されます。これは95%の確率で発生します。通常、5%のエッジケースは、新しいアプリコードが古いアプリに接触するポイントが多数あり、従来のASPの再作業を何度も行う必要があり、アプリがより脆弱になる可能性があることです。

  2. 機能に変更があった場合、最小限の影響でASP.NETにリファクタリングできるかどうかを評価します。これが不可能な場合は、従来のASPで変更を実装し、既存のコードを整理していきます。たとえば、インクルードファイルのネストを単純化し、javascriptをよりクロスブラウザー対応のコードに置き換えます。

#ifndefについてのあなたの質問に答えて、私が恐れている同等のものはありません。

于 2008-09-27T16:01:20.660 に答える
3
  1. 1つのファイルをグローバル見出しとインクルードに使用します(t-head.aspという名前を付けます)。このファイルはすべてのaspファイルに含まれています。
  2. 1つのファイルを使用して、サイトの視覚的なグローバルヘッダー(ロゴ、メニューなど)を作成し、そのすぐ後ろに含めます。それをt-begin.aspと呼びましょう
  3. 1つのファイルを使用して、サイトを視覚的なグローバルフッター(著作権、Googleアナリティクスなど)にし、t-begin.aspで開いているすべてのdivまたはテーブルを閉じます。このファイルをt-end.aspと呼びましょう
  4. 1つのフォルダを使用して、BUSと呼ばれるビジネスロジックファイルを配置します。このフォルダ内のファイルにインクルードを含めることはできません。ファイル内のすべての関数の前には、論理ユニットの名前を付ける必要があります(つまり、products.aspのすべての関数はproduct_ *で始まる必要があります)
  5. 1つのフォルダーを使用して、UIと呼ばれる再利用されたUIコードを配置します。このフォルダ内のファイルにインクルードを含めることはできません。

例:

<%@  Language=VBScript %>
<% Option Explicit %>
<% Response.Buffer = true%>
<html>
<head>
<!--#include file="../general/t-head.asp"-->
<!--#include file="../bus/product.asp"-->
<title>Products page</title>
</head>
<body>
<!--#include file="../general/t-begin.asp"-->

   <% 'all your code  %>

<!--#include file="../general/t-end.asp"--> 
</body>
</html>
于 2008-09-29T11:49:41.277 に答える
2

わお。ASP が嫌いな人が多いことにいつも驚かされます。まともな人には、Web アプリケーションを設計するための完全に有能な言語です。

ただし、ASP でインクルード ファイルを管理する方法が少し頭を悩ませる可能性があることは認めます。これは、(使用方法によっては) 含まれている関数の半分を使用していない場合でも、ファイルを読み込んで解析する必要があるためです。内部。

私は、initialise.asp複数の関数ライブラリ ( など) へのリンクを含む 1 つのインクルード ファイル (またはそのようなもの)を持つ傾向があり、すべてのライブラリ関数は自己完結型であるため、変数が交差する心配はありません。すべてのグローバル変数は宣言され、マスター ファイルで設定されます。これは、いつでもどこでも関数を使用でき、関数がどこで定義されたかを気にする必要がないことを意味します。また、Visual Studio や Primalscript などの IDE には、認識できない関数の呼び出しが見つかったときに「定義にジャンプ」する機能があります。lib_http.asplib_mssql.asp

次に、スクリプト固有のインクルードは、このマスター インクルード ファイルの呼び出し後にスクリプトにインクルードされます。

すべてのライブラリのすべての関数がスクリプト呼び出しごとにコンパイルされるため、これはメモリを大量に消費するアプローチであることを認めます。そのため、開発するサイトごとにメソッドを改良する必要があります。マスター インクルードとその他のページを介して何を呼び出すかを決定します。 -明確な。必要なものだけをロードできるのはいいことですが、それは DLL のアプローチであり、実際の開発の大部分では利用できません。また、小さなスクリプトをコンパイルするプロセッサのコストと、コンポーネントのロード。

簡潔なディレクトリ構造が必要であり、簡単に開発できますが、既存のサイトのすべてのコードを調べて、リンクや mappath 呼び出しを変更するのは面倒な場合があります。また、一部の IIS 管理者は、'..\'VBScript を介してディレクトリをトラバースする方法を禁止しているため、すべてのファイル参照は絶対パスでなければならないことに注意してください。

于 2008-09-29T09:44:35.463 に答える
0

コードを ASP VBScript から Visual Basic COM DLL に移行することを検討する必要があると思います。これにより、インクルードが多すぎることが緩和されます。

于 2008-09-27T15:08:53.220 に答える
0

エラーメッセージが表示される以外に、二重の包含を防ぐ方法がわかりません。ページ全体にインクルードが配置されていて、見つけにくくなっていますか?

余談ですが、開発サーバーでコードとデータベースのコピーを使用していますか? 私の経験から、最初にすべきことは、できるだけ早くライブ サイトから離れることです。最初は面倒ですが、ライブ サイトを台無しにすることなく自由に変更を加えることができます。インクルードと BAM に小さな変更を加えるのは簡単です。サイト全体がダウンします。

あなたが説明したように、次の戦略を使用していくつかのプロジェクトに取り組みました。

完全な書き直し - 時間とお金がある場合に最適ですが、通常、何か問題が発生し、できるだけ早く結果が必要な場合に電話を受けます。

小規模なプロジェクト - インクルード ロジックの知識を構築するために、IDE ですべてを開き、すべてのプロジェクト ファイルで関数/サブルーチンの検索を開始します。ほとんどの場合、すべてがあちこちに散らばっているので、ビジネス ロジックごとに整理されたインクルードの再構築を開始します。また、インクルードにスローされたインライン コード (サブルーチンや関数ではなく、生のコード) に出くわしたこともあるため、通常は後でリファクタリングするためにコードをページに戻すだけです。

大規模なプロジェクト - サブ/関数ヘッダーを含む行のインクルードを解析し、それらをテキスト ファイルにダンプして、どのルーチンがどこにあるかのリストを作成し、それを参照するために、いくつかのコードを使用します。これは、各ページに大量のインクルードがあり、コードベースについて理解できない場合に便利です。

于 2008-10-01T03:02:13.683 に答える