私は依存性注入にUnityを使用するMVC3プロジェクトを持っています。MVC3 + Unityプロジェクトの効率を改善しようとしています
メインMVC3プロジェクト、MVC3とデータ層の間にある「ドメイン」クラスライブラリ、およびデータ層を構成するクラスライブラリの束があります。
(MVC3) - (ドメイン) - (データ層)
これは、ドメインクラスのサービスコンストラクタの一つの例である:コントローラを有する呼び出されるたび
public DomainModelCacheServices(
Data.Interface.ICountryRepository countryRepository,
Data.Interface.ILanguageRepository languageRepository,
Data.Interface.ISocialNetRepository socialNetRepository
)
DomainModelCacheServicesのコンストラクタに新しいDomainModelCacheServicesオブジェクトが作成され、DomainModelCacheServicesのコンストラクタに3つのリポジトリクラスが作成されます。
私はこれが効率的だとは思いません!
これを悪化させるのは、クラスDomainModelCacheServicesがキャッシュクラスであることです。変更されないデータのリストをロードし、それらを静的として保持します。しかし、すべての参照に対して3つのリポジトリクラスを構築する必要があります。
シングルトン(永遠)のライフタイムをDomainModelCacheServicesに与えると、スレッドセーフであることを保証する必要があります。また、何百ものヒットを得る日が来たら、多くのロックが発生します。
私はこれにコンストラクタを変更することができます:
public DomainModelCacheServices(
IServiceLocator serviceLocator
)
私はなぜ知らないが、これは右見ていません。コンストラクタは目には無意味になり、ドメインクラスでUnityを参照する必要があり、何らかの理由でMVC3アプリケーションが所有するServiceLocatorをドメインクラスに認識させる必要があります。多分ゆるいカップリングが緩すぎるかもしれませんか?
これらのクラスをすべて構築することは、それほど効率的ではないようですが、私はそれについて心配するべきではありませんか?
ユニティが「遅延」コンストラクタパラメータをサポートしていればいいと思います。しかし、それはしません。
MVC3 + Unityプロジェクトをより効率的に、具体的にはドメインモデルの設計にする方法に関するアイデアはありますか?
読んでいただきありがとうございます!
"私がDomainModelCacheServicesにシングルトン(永遠)のライフタイムを与えた場合、スレッドセーフであることを保証する必要があります"静的な場合は既にそれを持っていないか、そこに何か不足していますか? – Glenn
@Glenn:フィールドは静的であり、クラス自体ではありません。 – jgauffin
最初にDomainModelCacheServicesをどのように使用しますか?このような一般的な名前とそれらのコンストラクタパラメータを使用すると、私は一度に多くのことをやろうとします。 – guillaume31