новичок здесь, извините, если это очевидный вопрос, и извините за мой английский.Я пытался в Google, но не нашел ответа на свой вопрос.
Я использую только код Visual Studio, Autofac, EF CTP5 (возможно, позже переключится на HHibernate из-за того, что EF CTP5 не поддерживает контейнер IoC) и пытается использовать следующие шаблоны: MVVM, DI, DDD.
Мой вопрос такой: когда несколько ViewModels запрашивают один и тот же объект домена из хранилища, я должен дать им один и тот же экземпляр или создать новыйэкземпляр для каждого запроса?
Если я создам новый экземпляр для каждого запроса, я думаю, я бы написал что-то вроде этого:
public class PersonRepository
{
public Person GetById(int id)
{
using (var dbContext = new MainDbContext())
{
return dbContext.Persons.Where(x => x.Id == id);
}
}
}
И после того, как любой ViewModle изменяет свой экземпляр домена,объект, я должен был бы найти способ уведомить все другие ViweModels, чтобы обновить их экземпляры, чтобы обеспечить целостность данных.
Если я дам один и тот же экземпляр объекта домена для всех запросов, то я думаю, я быдолжен написать что-то вроде этого:
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;
}
}
И мне также нужно найти способ удалить экземпляры из кэша, когда они не нужныy ViewModels (или использовать слабую ссылку на кеш), чтобы избежать утечки памяти.
Какой путь мне выбрать?У меня есть варианты получше?
Спасибо!
Редактировать: Изменено содержимое для лучшего описания.
(извините за мой английский)
Обновление:
После того, как я провел некоторое исследование по этому вопросу, я понял, что этот вопрос слишком запутанный, поэтому я разместил новый вопрос здесь: Несколько моделей представления модифицируют один и тот же объект домена