首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVVM和分层,实现服务层

MVVM和分层,实现服务层
EN

Stack Overflow用户
提问于 2011-04-03 08:14:59
回答 2查看 4K关注 0票数 7

我正在构建一个MVVM应用程序。我试图像这样构造我的应用程序:

我不知道这种方法在MVVM中是否常见。无论如何,ViewModel使用服务层来填充它正在包装的模型或ObservableCollection。为了利用它的服务,ViewModel有一个包含服务抽象的字段,如下所示:

代码语言:javascript
复制
IService service;

因为我使用Linq查询数据库,所以有与我的域名相同的实体。为了让ViewModel不知道服务层/数据库实体,我需要服务层返回一个域模型,而不是一个Linq生成的数据库实体。我这样做是为了做到以下几点(我正在工作的一个例子):

代码语言:javascript
复制
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?
  • 与MVVM?
  • 结合使用的一种很好的结构方式,我不得不使用Models.ItemType使其不同于来自数据库的ItemType。这个unavoidable?
  • I'm是不是还了一个ObservableCollection --也许其他的东西会更好地还给我,然后在某个地方做我返回的ObservableCollection?
  • Just --一般情况下,什么东西可以改进,或者你看到的判断错误是什么?

谢谢:-)

EN

Stack Overflow用户

回答已采纳

发布于 2011-04-03 08:24:25

没有理由重新创建Linq为您创建的数据对象。把它们传递给ViewModel,你会没事的。您可能需要在域和ViewModel之间创建一个解耦,但是由于这些实体只包含属性,而不包含逻辑,所以传递它们是可以的,而且编程也非常容易。

其他的东西都是最新的。唯一的一件事是我不会使用LinqToSql,而是使用EntityFramework。看起来完全一样,只有L2SQL是一件被女士抛弃的事情。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5528427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档