ここの初心者、これが明白な質問である場合は申し訳ありません。また、私の英語で申し訳ありません。Google を試しましたが、質問に対する回答が見つかりませんでした。
私は Visual Studio、Autofac、EF CTP5 コードのみを使用しており (EF CTP5 は IoC コンテナーをサポートしていないため、後で HHibernate に切り替える可能性があります)、次のパターンを使用しようとしています: MVVM、DI、DDD。
私の質問は次のとおりです。複数の ViewModel がリポジトリから同じドメイン オブジェクトを要求する場合、それらに同じインスタンスを与えるか、要求ごとに新しいインスタンスを作成する必要がありますか?
リクエストごとに新しいインスタンスを作成する場合、次のように書くと思います。
public class PersonRepository
{
public Person GetById(int id)
{
using (var dbContext = new MainDbContext())
{
return dbContext.Persons.Where(x => x.Id == id);
}
}
}
また、いずれかの ViewModle がドメイン オブジェクトのインスタンスを変更した後、データの整合性を確保するために、他のすべての ViewModel にインスタンスを更新するよう通知する方法を見つける必要があります。
すべてのリクエストに対してドメイン オブジェクトの同じインスタンスを指定する場合、次のように記述する必要があると思います。
public class PersonRepository
{
List<Person> _cache = new List<Person>();
public Person GetById(int id)
{
var person = getFromCache(id);
if (person == null)
{
person = getFromDatabase(id);
_cache.Add(person);
}
return person;
}
}
また、メモリ リークを回避するために、ViewModel でインスタンスが必要ない場合 (またはキャッシュに weakreference を使用する場合) にキャッシュからインスタンスを削除する方法を見つける必要もあります。
どちらに行けばいいですか?より良いオプションはありますか?
ありがとう!
編集:より良い説明のために内容を変更しました。
(私の英語でごめんなさい)
更新:
これについて調査した後、この質問がわかりにくかったので、ここに新しい質問を投稿しました: Multiple ViewModels modify the same domain object