質問

ASPの古典的なプロジェクトのコードベースを理解するのに苦労していることの1つは、インクルードファイルの状況がややこしいということです。探している関数が、まったく関係のないインクルードファイルに含まれていることがあります。関数を見つける必要がある場合、関数がどこにあるかをより簡単に知ることができるように、これをリファクタリングする方法に関するアドバイスはありますか?

編集:質問するのを忘れていたことが1つあります。vbscriptには、ファイルが2回インクルードされるのを防ぐメカニズムがありますか? Cの#ifndefのようなものですか?

役に立ちましたか?

解決

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

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

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

他のヒント

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

"私はこれをしません。 Steve Yegge(私は思う)を言い換えると、「完全な書き換えで修正できない古典的なASPアプリケーションには何も問題はありません」。私はこれについて非常に真剣です-ASPアプリを保守するよりも、この世界のプログラマーの時間の無駄が大きいとは思わず、ASPが時代遅れになるにつれて問題が悪化するだけです。

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

私たちは長年腕と足を伸ばしてきたかなり大きな古典的なASPアプリを持っています。それはきれいではありませんが、ビジネスのニーズを満たすものです。完全な書き直しを行うために次の6か月を費やす時間はありません。それは素晴らしいことですが、不可能です。私たちのアプローチは-

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

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

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

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

すごい。 ASPを嫌う人がどれだけいるのか、常に驚きます。まともな手で、それはウェブアプリケーションを設計するための完全に有能な言語です。

しかし、ASPでインクルードファイルを管理する方法は頭痛の種になる可能性があることを認めます-(使用方法に応じて)半分を使用していなくてもロードして解析する必要があるために含まれる関数。

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

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

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

簡潔なディレクトリ構造は必須であり、簡単に開発できますが、既存のサイト内のすべてのコードを調べて、リンクまたはmappath呼び出しを変更するのは面倒です。また、IIS管理者の中には、VBScriptを介してディレクトリを走査する '.. \' メソッドを許可しないため、すべてのファイル参照が絶対パスである必要があることに注意してください。

i ASP VBScriptからVisual Basic COM DLLにコードを移動することを検討する必要があると思います。インクルードが多すぎると楽になります。

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

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

次の戦略を説明して使用したようなプロジェクトをいくつか経験しました。

完全な書き換え-時間/お金がある場合に最適ですが、通常は何かがうまくいかず、結果がすぐに必要なときに電話を受けます。

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

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

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