16

大規模で古い、スパゲッティだらけの ASP システムで重要な開発を行う必要があります。私は長い間 ASP から離れており、Rails の開発に力を注いでいます。

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

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

ビジネス ロジックの単体テストも実施したいのですが、質問が多すぎるのではないでしょうか。

アップデート:

このプロジェクトには 200 を超える ASP スクリプトがあり、数千行にもなります。

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

4

8 に答える 8

13

仮定

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

経営陣は書き直しを求めていません。

あなたはレール上でルビーをやっているので、あなたの(VB / C#)ASP.NETはせいぜい無難です。

私の経験

私も、exexcel-vbaタイプによって意地悪にまとめられた古典的なASPシステムを継承しました。このようなものはたくさんありました<font size=3>crap</font>(そして時々終了タグが欠落しています; Argggh!)。2.5年間で、セキュリティシステム、共通ライブラリ、CSS + XHTMLを追加し、xhtml1.1を検証するように強制することができました(残念ながら、適切なmimeタイプはありません)。 80人のユーザーが毎日使用しています。

私はjEditをcTags(上記のjamingで述べたように)と他のプラグインの束とともに使用しました。

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

クラスを使用してください。それらは超原始的(継承なし)ですが、ジャミングが言ったように、それらは便利です。

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

コメント

外部アーキテクチャドキュメントを作成します。私は個人的にLyXを使用しています。これは、適切にフォーマットされたpdfを作成するのは頭がおかしいためですが、好きなものを使用できます。Wikiを使用する場合は、graphvizアドインをインストールして使用してください。簡単に変更できる簡単な図を作成するのは非常に簡単です。

拡張機能がどれほど重要である必要があるかわからないので、拡張機能を計画する際に、高レベルから中レベルの優れたアーキテクチャドキュメントを用意しておくと非常に役立つことをお勧めします。

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

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

最後に、助けが必要な場合は、契約テレコミューティング作業を行うためのいくつかの可用性があります(おそらく最大8時間/週)。連絡先情報については、リンクトレイルをたどってください。

幸運を!HTH。

于 2008-09-13T08:13:51.920 に答える
4

動作中のシステムを完全に書き直すことは非常に危険である可能性があるため、私はあなたに小さなヒントを与えることしかできません:あなたのプロジェクトにあふれんばかりのタグ、ctagsを設定してください。このようにして、関数とサブイージーの定義にジャンプできます。これは非常に役立つと思います。

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

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

于 2008-08-23T22:20:00.483 に答える
2

私はASPUnitを使用して、従来のASPのいくつかを単体テストし、それが役立つと感じています。古いかもしれませんが、ASPもそうです。シンプルですが、機能し、必要に応じてカスタマイズまたは拡張できます。

また、Michael Feathersによるレガシーコードを効果的に使用することは、その古いコードの一部をテストする方法を見つけるための有用なガイドであることがわかりました。

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

于 2008-11-15T21:27:24.060 に答える
2

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

ASPのリファクタリング

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

于 2008-11-05T12:14:47.570 に答える
1

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

于 2008-08-23T17:46:22.390 に答える
1

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

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

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

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

于 2008-09-13T05:04:50.157 に答える
0

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

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

ソフトウェア開発プロジェクト管理の慣行は、このようなソフトウェアは廃止する必要があることを示しています。

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

それでも。新しいソフトウェアの開発に着手する必要があります。これを永遠に維持することは単純に不可能であり、彼らがそれを廃止するのを待っているログはさらに悪い.

適切な仕様/要件のドキュメントを持っていない場合 (これらのコーダーの初心者の能力を考えると、世界の ASP ソフトウェアはそうではないと思います)、ソフトウェアの機能を知っているユーザーのグループと管理者の両方が必要になります。要件を検証する責任があります。すべての機能を確認し、その要件を文書化する必要があります。

その過程で、ソフトウェアとそのビジネスについてさらに学びます。十分な情報が得られたら、新しいものの開発を開始できます。

于 2015-06-24T16:57:42.927 に答える