我正在构建一个MVVM应用程序。我试图构建我的应用程序是这样的:MVVM和分层,实现服务层
我不知道这种方法在MVVM是常见的。无论如何,ViewModel使用服务层来填充它正在包装的Model或ObservableCollection。为了让使用其服务的,视图模型具有保持服务的抽象,像这样一个领域:
IService service;
因为我使用LINQ查询数据库,我有两个具有相同的名称作为我的域实体名。为了让ViewModel不知道服务层/数据库实体,我需要服务层返回域模型而不是Linq生成的数据库实体。我这样做,通过执行以下(的东西比如我在工作中工作):
ObservableCollection<ItemTypeViewModel> GetItemTypes()
{
DataContextLocalDB dc = new DataContextLocalDB();
ObservableCollection<ItemTypeViewModel> itemTypes = new ObservableCollection<ItemTypeViewModel>();
foreach (ItemType itemType in dc.ItemTypes)
{
Models.ItemType type = new Models.ItemType();
type.Name = itemType.Name;
type.Description = itemType.Description;
ItemTypeViewModel itemTypeViewModel = new ItemTypeViewModel(type);
itemTypes.Add(itemTypeViewModel);
}
}
有一对夫妇的事情,我很不满意/不确定:
- 是一个很好的与MVVM结合的结构方式?
- 我不得不使用Models.ItemType使它与来自数据库的ItemType不同。这是不可避免的吗?
- 我正在回馈一个ObservableCollection - 也许别的什么东西会更好地回馈,然后在某个地方让我返回一个ObservableCollection?
- 就在一般情况下,有什么可以改进的,或者可能是您看到我做出的判断错误?
感谢:-)
是啊,我知道了L2SQL。关于实体和域模型,你是否说我可以放弃拥有域模型?在很多关于MVVM的例子中,我看到人们有一个他们返回的模型,像这样:'foreach(this.db.Person中的Person人){this.persons.Add(new PersonViewModel(person));',其中Person是一个领域模型,而不是一个实体。人域模型就像他们说的贫血一样。为什么会有一个域模型,如果它们与实体相同? – TheDude 2011-04-03 09:39:17
这正是我所说的。至于为什么他们不需要复制对象 - 问问他们! ;) – 2011-04-03 11:59:45