5

私はここでいくつかの悪い解決策の間に立ち往生しているように感じ、将来の苦痛を最小限に抑える方法についていくつかのアドバイスが必要です。Massive ORMを使用しています。これは、コンストラクターに次の行があります。

var _providerName = "System.Data.SqlClient";

if (ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName != null)
    _providerName = ConfigurationManager.ConnectionStrings[connectionStringName].ProviderName;

_factory = DbProviderFactories.GetFactory(_providerName);
ConnectionString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;

ここで私にとって重要な部分は、から接続文字列を読み取ることですConfigurationManager。構成を一元化しようとしています。これを行う際に、接続文字列をweb / app.configsから除外します(約150のホストがデプロイされているため、オーバーヘッドが大きくなっています)。ただし、ここで読み取られた構成ファイルがハードコーディングされており、ConnectionStringsコレクションが読み取り専用であるため、これは機能しなくなります(回避策はありますが、すべてかなりダーティです)。

これを回避する1つの方法は、これらの行を仮想メソッドに抽出してから、継承を使用して変更することです。ただし、Massiveを更新する場合、これはあまり良くありません。また、コンストラクターから仮想メソッドを呼び出すことは潜在的に悪いことです。

他にどのような選択肢がありますか?ここでの主な優先事項は、更新時の影響を最小限に抑えることです。

4

2 に答える 2

1

コンストラクターを介してすべての必須フィールドを渡すことにより、オブジェクトの構成ソースの依存関係を排除できます。

依存性注入に関する Martin Fowler の記事を参照してください。ここでも同じ概念が適用されます。

于 2012-10-20T16:23:25.427 に答える
1

最終的に、大規模なクラスを部分的に変更することで最小限の変更を行うことにしました。次に、別のファイルに、さまざまなパラメーターを受け入れる追加のコンストラクターを追加しました。このように、ライブラリを更新する場合、必要な唯一の変更は、partial再度追加することです。

于 2013-03-20T06:49:34.980 に答える