私の 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 パラメーターを解析する責任の一部ではありません。
私がこれを考えすぎているかどうかはわかりません。私はこのレベルの開発の認識に不慣れです。質問は既に回答済みであることは承知していますが、私のこの新しいアイデアについてさらにコメントをいただければ幸いです。