1

私の Web アプリケーションには、このような URL パラメーターを解析するメソッドがあります。

...
layerName = HtmlPage.Document.QueryString["Layer"] . . . ;
...

当社の部門の 1 つに、このアプリケーションのパラメーターを含む URL のリストがありますが、理由はわかりませんが、これらのパラメーターを変更するのは困難です。このような URL を使用する場合があります。.../default.aspx?Service=Wells&Layer=ActiveWells&Query=XYZ IN ('1234567890...')

最近、次のような変化がありました。「ActiveWells」レイヤー名が「Surface Participation Wells」に変更されました。「BoreStick」レイヤー名が「WellBores」に変更されました。したがって、その部門の事前設定された URL パラメーターは機能しなくなります。

私のマネージャーは、「ActiveWells」のインスタンスを「Surface Participation Wells」のようなものに変更するコードを追加するように私に言いました。その後、マネージャーは、後で URL パラメーターを持つ部門がそれらをすべて新しい名前に変更したときに、そのコードを削除できると言いました。

「密結合」とは正確にはわかりません。しかし、私はそれが悪いことを知っており、これはその例のように聞こえます. また、コードを一時的に保持して後で削除することを意図してコードを追加することは、悪い考えのように思えます。

しかし、私は自分の命令に従い、次のようなコードを追加しました:

layerName = NameConverter.LayerNameChange(layerName);

静的な LayerNameChange メソッドに switch ステートメントがあります。

今から数か月または数年後、このアプリの開発者は誰であれ、他の部門が事前設定されたすべての URL パラメータの変更を完了したときに、これを削除する必要があることを知っているはずです。

これに似た別のシナリオは、コンソールまたは Windows ベースのアプリケーションが、

Main(string[] args){...}

これを行うためのより良い方法はありますか?


編集:

上で述べたことの代わりに、以下の疑似コードのようなことをしたらどうなるでしょうか。

private void MethodToParseURL_Parameters(Func<string, string> nameReplace)
{
   . . .
   layerName = nameReplace(layerName);
   . . .
}

呼び出しメソッドには、ある種の、

MethodToParseURL_Parameters(new Func<string, string>(NameConverter.LayerNameChange));

解析メソッドが NameConverter クラスの存在を知る必要があるのはなぜですか?
そう自分に問いかけました。
結局のところ、私が見ているように、それは URL パラメーターを解析する責任の一部ではありません。

私がこれを考えすぎているかどうかはわかりません。私はこのレベルの開発の認識に不慣れです。質問は既に回答済みであることは承知していますが、私のこの新しいアイデアについてさらにコメントをいただければ幸いです。

4

1 に答える 1

1

これは結合の問題ではありません。関数 (Web サービスであっても) に名前でパラメーターを渡すことは、特に問題ではありません。

先に進む前に対処しなければならない問題の 1 つは、SQL インジェクションのセキュリティ問題です。リストの最後のパラメーターは、SQL ステートメントの一部であると思います。サイトに損害を与える SQL ステートメントの断片を誰かが作成するとどうなりますか? 「SQL インジェクション」について調べます。

shim NameConverter を追加して、正しいことをしました。想定どおりに名前を変換し、名前を再マッピングするためのローカライズされた分離された方法を提供します。別の部門が永久に持ちこたえたいと考えているとしますか? あなたのコードは永遠にそのままです。ただし、Map を使用して、より一般的なマップ関数を使用することをお勧めします。そうすれば、データとコントロールをより明確に分離できます。

あなたの同僚は将来何ができるでしょうか?Bugzilla や Jira などのチケット システムに問題があることを願っています。NameConverter シムとその変更方法を説明する未定義の将来のリリースのチケットを提出するだけです。適切なチケット管理規律があれば、人々はすべての未処理のチケットに精通し、必要なときにそれを思い出すことができます。

于 2013-05-15T16:52:33.280 に答える