1

ASP.NET 3.5

ソリューション全体のクラスは ConfigurationManater.AppSettings[""] を参照して appSettings を取得しました (web.config から)。

私たちはそれに満足していないと判断しました。コード内で appSetting のキー名をタイプミスする人がいて (問題なくコンパイルされました)、使用状況を追跡するのが面倒でした。そして、どこでも同じ appSettings を参照しているため、コードベース全体に重複した文字列があります。

そのため、ConfigurationManager を参照できるのは 1 つのクラスのみであり、ソリューションの残りの部分は、特定の appSetting の値が必要なときにそのクラスを参照することにしました。ConfigurationManater.AppSettings[""] は静的だったので、単一の Settings クラスから一連の静的な読み取り専用プロパティを公開しました。

public class Settings {
    public static string Foo {
        get {
            return ConfigurationManager.AppSettings["Foo"];
        }
    }
}

テストで設定をモックする必要があるまでは、これでうまくいきました。モッキングを可能にするインターフェースを作成しました (これは何かの間違いでしたか?)。

public interface ISettings {
    string Foo {
        get;
        set;
    }

}

public class Settings : ISettings {
    public string Foo {
        get {
            return ConfigurationManager.AppSettings["Foo"];
        }
    }
}

そして今、設定値を使用するオブジェクトの依存関係として ISettings インスタンスを注入しています (クラス/インターフェイスは、誰もが問題なく参照できるプロジェクトにあります)。

既存のインスタンス (Global.asax など) を挿入できない場所では、静的フィールドに新しいインスタンスを構築します。

これらすべてを考慮して、何を変更することをお勧めしますか? また、その理由は何ですか?

4

1 に答える 1

0

インターフェイスを使用して構成を表すことは良い考えです。しかし、あなたの実装は少しずれているように見えます。

Joshua Flanagan は、特定の構成セクションをコードに挿入できる方法でアプリケーション構成コードを記述することについて書いています。これは、構成の背後にある詳細について心配することからコードを実際に分離するため、良い考えです。読んでください

これにより、あなたが抱えている問題に対処できると思います。テスト容易性。

于 2010-03-05T16:52:21.830 に答える