2017-03-09 8 views
2

現在、MVCアプリケーションを最適化しています。オブジェクトはに作成されています。でもfunctionに一つだけのオブジェクトが必要ですが、他のオブジェクトも作成され、このCでオブジェクトを作成する

private readonly IUnitOfWork _unitOfWork; 
private readonly GenericRepository<User> _user; 
private readonly GenericRepository<UserDevice> _userDevice; 
public UsersController() 
{ 
    _unitOfWork = new UnitOfWork(); 
    _user = new GenericRepository<User>(_unitOfWork); 
    _userDevice = new GenericRepository<UserDevice>(_unitOfWork); 
} 

このようなものは単純な例ですが、実際にで作成するより多くのオブジェクトがあります。オブジェクトが必要なときにのみ作成するパターンを実装したいと思います。

すべてのオブジェクトを作成する必要があるAbstract Factory Patternを使用することを私の心に残していますが、実装方法はわかりません。皆さんは問題のための他の解決方法を提案することができます。パターンはちょうど私の考えです。おかげ

編集
methodでオブジェクトを使用して、需要手段では、私だけ_userオブジェクトを必要とするように、なぜ_userDevice作成はありますか?

+0

"オブジェクトは必要なときにのみ作成する必要があります" - どこに?いつ?あなたの質問は明確ではありません。 「必要なとき」とは、1)実行中の特定の時間に2)を意味する可能性があるため、あいまいなフレーズです。コード内で呼び出されることはありませんが、コード内で静的に定義されています。コード。 –

+0

あなたのクラスがたくさんのオブジェクトを必要としますが、それらを時々しか使用しない場合は、[Single Responsibility Principle](https://en.wikipedia.org/wiki/Single_responsibility_principle)に違反している可能性があります。 [SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))の原則を念頭に置いてデザインを見直したいかもしれません。しかし、実際にあなたの質問に答えるには、[Lazy ](https://msdn.microsoft.com/en-us/library/dd642331(v = vs.110).aspx)を使用して彼らは実際に必要ですか? –

+0

これらのオブジェクトは作成するのに費用がかかりますか?コードをプロファイリングして最適化していますか? –

答えて

4

Lazy<T>あなたが探しているものとまったく同じです。

private readonly Lazy<IUnitOfWork> _lazyUnitOfWork; 

public UsersController() 
{ 
    _layzUnitOfWork = new Lazy<IUnitOfWork>(() => new UnitOfWork()); 
} 

// Instantiates the unit of work on first use 
private IUnitOfWork _unitOfWork { get { return _lazyUnitOfWork.Value; } } 
+0

ご返信ありがとうございます。もう1つ、私はコントローラからすべての初期化を削除することを考えています、抽象クラスを作成し、そこにすべてのオブジェクトを追加するLazy とその抽象クラスの具体的なクラスを作成します。いいアイデアですか? –

+0

@AliShahbaz:私はそれに問題はありません。 – Heinzi

+0

よろしくお願いします。 –

関連する問題