0

何を使えばいいのかわからない。私は3つのクラスを持っています。PasswordService、、。SettingsService_ FileServiceこれらのクラスには、それぞれ約2つのメソッドが含まれています。メソッドは、より多くのアセンブリで使用されています。今はシングルトンとして使っています。しかし、私はそうすべきかどうかわかりません。静的クラスで十分だと思います。どう思いますか?

コード:

public class PasswordService
{

    private PasswordService(){}

    private static PasswordService _instance;

    public static PasswordService Instance
    {
        get { return _instance ?? (_instance = new PasswordService()); }
    }

    public byte[] EncryptPassword(string password)
    {

        var protectedPass = Encoding.UTF8.GetBytes(password);
        return ProtectedData.Protect(protectedPass, null);
    }

    public string DecryptPassword(byte[] encryptedPassword)
    {
        var unprotectedPass = ProtectedData.Unprotect(encryptedPassword, null);
        return Encoding.UTF8.GetString(unprotectedPass, 0, unprotectedPass.Length);
    }
}
4

3 に答える 3

2

クラスに状態がないため、クラスのインスタンスを使用する理由はありません。静的クラスを使用することをお勧めします。

于 2013-03-18T11:22:16.640 に答える
1

インスタンスまたは DI を使用していない限り、Singleton を保持することをお勧めします。シングルトンは非常に簡単にインスタンスにリファクタリングできますが、静的クラスは非静的になるように再実装する必要があります。さらに、インスタンスをテスト ダミーに置き換えることはできますが、静的な実装を置き換えることはほとんど不可能です。

FileConfigurationたとえば、2 つの異なる構成ファイルに対して、プログラムが複数のインスタンスを処理しなければならない状況に遭遇する場合があります。シングルトンは、2 つのインスタンス プールに分割できます。

以前は静的で 1 つの DB に接続できる DAO クラスでこの問題に遭遇しました。新しい要件には、1 つのプログラム インスタンスで n>1 データベースをサポートすることが含まれていたため、リファクタリングする必要がありました。

Mikhail が指摘しているように、真にステートレスなものにのみ static を使用してください。構成ファイルまたは静的フィールドで選択されたパスワード ハッシュ アルゴリズムは既にstateであり、上記の例の接続文字列は実行時に変更されない可能性がありますが、.

于 2013-03-18T11:20:23.390 に答える
1

1 - これらのサービスは 1 つの特定のタスクを処理するように見えるため、これらのサービスに対してシングルトンを作成するのは正しいことです。

2 - TDD を使用し、継続的な統合サーバーで自動単体テストを行うと効率的にモックできないため、可能な限り Static を避けます。

于 2013-03-18T11:17:20.963 に答える