新手,对不起,如果这是一个明显的问题,对不起我的英语。我试图谷歌但没有找到我的问题的答案。
我只使用 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 修改其域对象实例之后,我必须找到一种方法来通知所有其他 ViweModel 更新它们的实例,以确保数据完整性。
如果我为所有请求提供相同的域对象实例,那么我想我将不得不编写如下内容:
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 不需要实例时从缓存中删除它们(或对缓存使用弱引用),以避免内存泄漏。
我应该走哪条路?我有更好的选择吗?
谢谢!
编辑:更改内容以获得更好的描述。
(对不起我的英语不好)
更新:
在我对此做了一些研究之后,我意识到这个问题太令人困惑了,所以我在这里发布了一个新问题:Multiple ViewModels modify the same domain object