【发布时间】:2011-07-25 11:11:33
【问题描述】:
如果我从 EntityFramework 生成 POCO 对象,并使用这些对象进出 WCF 服务器,是否有任何理由创建客户端模型以供视图和视图模型使用,而不是直接使用 POCO?
我看过的几乎所有 MVVM 示例都直接绑定到从 WCF 服务返回的对象。这是好习惯吗?是否可以为将 POCO 实际映射到模型并让 Views/ViewModels 使用 Model 对象而不是 POCO 进行论证?
我能想到的主要原因是验证,但是由于 EF POCO 是部分类,它们可以扩展为包括验证。
编辑
到目前为止,大多数答案都将INotifyPropertyChanged 作为构建单独模型的主要原因。如果您使用自我跟踪实体而不是已经包含INotifyPropertyChanged 的 POCO,您的答案会改变吗? STE 也是部分类,可以对其进行扩展以包括验证。
【问题讨论】:
-
自跟踪 EF POCO 可能没问题,但常规自跟踪实体仍将整个实体暴露给视图。我想我宁愿将它们存储在私有变量中,并根据需要将 ViewModel 属性映射到它们(不公开整个实体,只是我想要查看和更新的部分。我不知道,也许我也在制作太多了。
-
好的,我们在 WPF 应用程序中做了类似的事情,这个周末在南马里兰州 Give Camp。我们使用 Self-tracking entity T4 模板生成 POCO 实体类,并通过服务层公开它们。在实验中,我认为没有理由不直接使用 POCO。我们没有包装它们,而是创建了 Partial 类文件来根据需要增强它们。效果很好(有一些注意事项,比如终于意识到默认情况下,自我跟踪实体上没有启用“自我跟踪”)。
-
您在哪里进行验证?不要忘记模型上的 INotifyDataErrorInfo(如果您在 Reed 阵营,则为 ViewModel :D)
-
如果您正在做一些快速而简单的事情,并且您的视图对您的对象的要求不高,那么请务必使用它们——我自己经常这样做。然而,因为你永远不知道你的视图什么时候会被增强和复杂化——毕竟这就是 MVVM 的美妙之处——你最好为任何用于绑定到视图的重要对象创建好的丰富对象。那是因为你可能不再是未来编写视图的人,并在路上抱怨底层对象缺乏特征。
标签: wpf wcf entity-framework mvvm poco