クラシック ASP をリファクタリングするためのベスト プラクティスは何ですか?

StackOverflow https://stackoverflow.com/questions/23899

質問

大規模で古く、スパゲッティだらけの ASP システムで重要な開発を行う必要があります。私は長い間 ASP から離れており、Rails 開発にエネルギーを集中していました。

私が行った基本的な手順の 1 つは、ページを意味のある名前を持つサブルーチンと関数にリファクタリングして、少なくともファイルの先頭で一般的に何が起こっているのかを簡単に理解できるようにすることです。

ASP 用の価値のある MVC フレームワークはありますか?それとも、少なくともビューからビジネス ロジックを取得する方法のベスト プラクティスですか?(昔、たくさんのインクルードを行ったのを覚えています。今でもそれを行う方法ですか?)

ビジネス ロジックについても単体テストを実行したいと考えていますが、要求しすぎているでしょうか?

アップデート:

プロジェクトには 200 を超える ASP スクリプトがあり、その長さは数千行に及びます ;) うわー!

「大幅な書き直し」を選択するかもしれませんが、それまでは、ページを変更するときに、スパゲッティをクリーンアップするために少し余分な時間を費やしたいと思っています。

役に立ちましたか?

解決

仮定

Classic ASP システムのドキュメントはかなり軽いです。

経営陣は書き換えを求めていません。

Ruby on Rails を実行しているため、(VB/C#) ASP.NET はせいぜい合格レベルです。

私の経験

私も、元 Excel-VBA タイプによって意のままに組み立てられた古典的な ASP システムを受け継ぎました。こういうのがたくさんありました <font size=3>crap</font> (終了タグが欠落している場合もあります。ああ!)。2 年半かけて、セキュリティ システム、共通ライブラリ、CSS+XHTML を追加し、xhtml1.1 (残念ながら適切な MIME タイプがありません) を強制的に検証することができ、かなり堅牢で ajaxy レポート システムを構築しました。毎日 80 人のユーザーが使用しています。

私は jEdit と cTags を使用しました (前述のように) ジャミング 上記)、その他のプラグインも多数あります。

私のアドバイスよく使用されるすべてのものをインポートするためのマスター インクルード ファイルを作成してみてください。ログイン/ログアウト、データベース アクセス、Web サービス、JavaScript ライブラリなど。

クラスを使用してください。これらは超原始的 (継承なし) ですが、Jamting が述べたように、便利な場合があります。

スクリプトを適切にインデントします。

コメント

外部アーキテクチャのドキュメントを作成します。私は個人的に LyX を使用しています。整形式の PDF を作成するのは非常に難しいためですが、好きなものを使用できます。Wiki を使用する場合は、graphviz アドインをインストールして使用します。簡単に変更できる簡単な図を作成するのは非常に簡単です。

機能拡張がどれほど実質的なものになる必要があるのか​​見当がつかないので、機能拡張を計画する際には、優れた高レベルから中レベルのアーキテクチャ文書が非常に役立つことをお勧めします。

ビジネス ロジックの単体テストで、機能することがわかった唯一のことは、メイン ライブラリをインポートし、メイン ライブラリのサブインクルードの関数 (ただしサブルーチンではない) を公開する asp で xml-rpc リスナーを設定することです。 xml-rpc を介して ASP 関数を呼び出すものをより適切にサポートする言語で単体テスト システムを別途構築します。私は Python を使っていますが、Ruby を使うべきだと思います。(それは理にかなっていますか?)。素晴らしいのは、ソフトウェアの単体テスト部分を作成する人は、呼び出す関数の適切な説明があれば、ASP コードを見る必要さえなく、あなたの隣にいる誰かになれるということです。

というプロジェクトがあります アスプユニット SourceForge にありますが、最後のリリースは 2004 年で、非アクティブとしてマークされています。使ったことはありませんが、純粋な vbscript です。コードをざっと見ると、作成者は自分たちが何をしているのかを知っていたようです。

最後に、サポートが必要な場合は、契約在宅勤務の仕事を行うことができます (おそらく週最大 8 時間)。連絡先情報については、リンク トレイルに従ってください。

幸運を!HTH。

他のヒント

動作しているシステムを完全に書き直すことは非常に危険な可能性があるため、私は小さなヒントしか提供できません。プロジェクトに豊富なタグ、ctag を設定します。このようにして、関数の定義やサブ簡単な部分にジャンプすることができ、非常に役立つと思います。

ロジックと「ビュー」の分離について。VBScript は、クラスを使用したいくつかの種類の OO をサポートしています。私は、「ビュー」として機能する asp ページに含めるロジックを実行するクラスを作成する傾向があります。次に、ビューを Username のようなクラスにフックします。<%= MyAccount.UserName %>。MyAccount クラスには次のようなメソッドも含めることができます。MyAccount.Login() など。

かなり原始的ですが、少なくとも一部のコードをカプセル化して HTML から隠すことができます。

私のアドバイスは、リファクタリングを続けることです。従来の ASP はクラスをサポートしているため、表示コード以外のすべてを、クラスのみを含む組み込みの ASP ファイルに移動できるはずです。旧式の ASP から ASP.NET への移行の詳細については、この記事を参照してください。

ASPのリファクタリング

将来の方向性に関しては、私は ASP.NET Web フォームを目指すつもりはありません。代わりに、ASP.NET のアドオンである Microsoft の新しい MVC フレームワークを目指します。従来の ASP からこれに移行するのははるかに簡単です。

私が使う ASPUユニット 従来の ASP の一部を単体テストするのに役立ちます。古いかもしれませんが、ASPも同様です。シンプルですが機能し、必要に応じてカスタマイズまたは拡張できます。

私も見つけました レガシーコードを効果的に使用する Michael Feathers 著は、古いコードの一部をテストする方法を見つけるための役立つガイドです。

シンプルに保つ限り、インクルード ファイルは役に立ちます。ある時点で、クラスごとにインクルードを作成しようとしましたが、あまりうまくいきませんでした。私は、共通のビジネス ロジックを備えたメイン インクルードをいくつか用意するのが好きで、複雑なページの場合は、それらのページごとにロジックを備えたインクルードを用意することもあります。同様の設定で MVC を実行できると思います。

ASP から ASP.Net に移行できる可能性はありますか?それとも、従来の ASP に残しておきながら、単にクリーンアップすることを検討していますか。可能であれば、できるだけ .Net に移行することをお勧めします。いずれにせよ、多くのコードを書き直したり再編成したりする可能性があるため、.Net への移行には特別な労力はかからないかもしれません。

おそらく、あなたが現在保守しているシステムのほとんどまたはすべてを他の誰かが作成したと思われます。よくある悪い習慣 (コードの繰り返し、範囲が広すぎる変数、ネストされた if ステートメントなど) を探し、他の言語と同様にリファクタリングします。同じファイルまたは別のファイル内で繰り返し発生するものに注意して、それらを関数に抽象化します。

コードがさまざまな人々によって作成/保守されている場合、一貫性のないコーディング スタイルによって問題が発生する可能性があります。コードを一行に戻すと、リファクタリングできる点がわかりやすくなることがわかりました。

「数千行」というと、関連性の低いものが同じページ内に表示されている状況もあるのではないかと疑ってしまいます。ここでも、それらを個別のサブルーチンに抽象化する必要があります。

最終的には、データベース接続などのカプセル化に役立つオブジェクトを作成したいと考えていますが、そこに到達するまでにはしばらく時間がかかります。

これは非常に古いものですが、2 セントを追加せずにはいられませんでした。書き直す必要があり、従来の ASP を引き続き使用する必要がある場合:

  • JScriptを使ってみましょう!はるかに強力で、継承が得られ、クライアント側で使用するものと同じメソッドをサーバー側で検証に使用できるなど、いくつかの良い副次的利点もあります。
  • MVC は絶対に実行できます - 私は MVC フレームワークを書きましたが、それほど多くのコード行ではありませんでした
  • 少しの作業でモデルクラスを自動的に生成することもできます。非常にうまく機能するコードがいくつかあります
  • パラメータ化されたクエリを実行し、常に切断されたレコードセットを返すようにしてください。

ソフトウェア開発プロジェクト管理の慣行によれば、このようなソフトウェアは廃止する必要があることがわかります。

正しいことをすることがいかに難しいかを私は知っています。責任あるマネージャーがそれを知っていて、最悪の方法以外のすべてを恐れている場合はなおさらです。

それでも。新しいソフトウェアの開発に取り組み始める必要があります。これを永久に維持することはまったく不可能であり、廃止されるのを待っているほど状況は悪化します。

適切な仕様/要件のドキュメントがない場合 (プログラマーの noobatry 能力を考えると、世界中の ASP ソフトウェアにはそのようなものはないと思います)、ソフトウェアの機能を理解しているユーザーのグループと、その機能を理解するマネージャーの両方が必要になります。要件を検証する責任があります。すべての機能を確認し、その要件を文書化する必要があります。

そのプロセス中に、ソフトウェアとそのビジネスについてさらに詳しく学ぶことになります。十分な情報が得られたら、新しい情報の開発を開始できます。

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