2

1つのメソッドStoreData(data)を使用して単一のインターフェイスIStoreにコード化された2つのクラスがあります。1つのクラスはDBに書き込むWebサービスにデータを送信し、もう1つのクラスはDBに直接データを書き込みます。(ファクトリパターン)

public IStore GetStorageClass(StorageType type)
{
    if (type == StorageType.WebService)
        return new WebService();
    else 
        return new DatabaseStore();
}

ここで、DatabaseStoreクラスが機能するには接続文字列が必要です。問題は、DatabaseStoreに接続文字列を提供するのは誰の責任であり、どのように行うのかということです。私は考えました:

  1. ファクトリは、DatabaseStoreに渡す接続文字列を知っているだけです。

  2. DatabaseStoreコンストラクターは、エンドユーザーが指定した構成からそれを読み取ります。

  3. GetStorageClassの呼び出し元は、正確な実装を認識していませんが、パラメーターが接続文字列であるパラメーターと値のディクショナリを渡します(呼び出し元は、データベースの操作には接続文字列が必要であることを知っています)

どのオプションを選択する必要があり、ここでファクトリパターンを正しく使用していますか?助けに感謝します!

4

1 に答える 1

1

責任は、GetStorageClass を含むクラスにあります。コンストラクターに提供された接続文字列値を使用して構築されたか、別のソースから値を読み取るプライベート メソッドがあります。

StorageType に加えてキーと値のストアを渡すのは曖昧すぎるため、API のコンシューマーは IStore のインスタンスを取得するだけで、構成も必要としません。

特定の ISt​​ore 実装の構成を行う必要がある場合は、その実装のビルダー パターンを実装し、ビルダーをファクトリに挿入することができます。

于 2013-03-12T17:22:00.010 に答える