1

GetSelector現在、の具体的な実装を返す関数を特徴とするFactoryクラスがありますISelectorISelectorISelectorを実装するいくつかの異なるクラスがあり、設定に基づいて適切な返送を受け取りたいと思います。

public interface ISelector
{
    string GetValue(string Params);
}

public class XmlSelector : ISelector
{
    public string GetValue(string Params)
    {
        // open XML file and get value
    }
}

public static class SelectorFactory
{
    public static ISelector GetSelector()
    {
        return new XmlSelector(); // Needs changing to look at settings
    }
}

私の質問は、設定を保存するための最良の方法は何ですか?AppSettingsなどを使用することは知っていますが、文字列をweb.configに保存してスイッチを実行する必要があるかどうかはわかりません。つまり、ISelectorの新しい実装が作成された場合、ファクトリを変更する必要があります。アセンブリ名を保存し、それに基づいてインスタンス化する方法はありますか?

ありがとう、

クリス

4

2 に答える 2

0

あなたの特定のプロジェクトのアーキテクチャがわからないので、言うのは難しいですが、一見したところ、ISelectorに関連付けられたオブジェクトをWebアプリケーションから切り離すことができれば、これらのオブジェクトを工場と一緒にクラスライブラリ。新しいISelectorを実装する場合は、ファクトリを変更する必要がありますが、ISelectorファミリ全体を実際のWebアプリケーションから切り離すことができる場合、モノリシックアーキテクチャと比較して、実行する必要のあるリファクタリングの深さは最小限に抑えられます。

個人的には、ミッションクリティカルな設計の質問では、AppSettingsやweb.config設定などを避ける傾向があります。例としてweb.configを使用すると、構成を容易にするためにアーキテクチャデータが保存されるアプリケーションを見てきました。問題は、コンパイル後にweb.configを変更できることです(つまり、その目的です)。クラスの実装が選択した特定の値に依存している場合、誰かが誤って変更するとクラッシュするリスクがあります。間違った値。

私が言ったように、これはすべてアプリケーションアーキテクチャに完全に依存しますが、私の反射は、将来の変更の対象となる可能性のあるコンポーネントをクラスライブラリに分割することです。緩い結合はあなたの友達です;)。

于 2012-10-23T10:57:38.407 に答える
0

AppSettingsで行う代わりに、別のXMLファイルを作成することをお勧めします。このファイルにはマッピングのみが保持され、そのファイルからマッピングを繰り返し処理して、で正しいインスタンスを返すことができますGetSelector()

于 2012-10-23T10:57:47.750 に答える