域层的实体可以在MVVM模式中成为我的模型吗?

时间:2014-05-22 09:43:47

标签: c# validation mvvm mvp caliburn.micro

我开始设计我的应用程序的MVVM部分,我有一些疑问:)

我已经拥有了我的域层与实体,我已经定义了一些逻辑(添加和删除列表的方法,只读集合,计算属性......)和验证(使用CodeContract制作)

阅读网上可以找到的各种指南,我发现很多例子,其中MVVM模型是通过在镜像中复制实体创建的,然后在ViewModel类中使用此模型。我不能直接使用我的实体吗?

另一件事(虽然在这里我需要多研究一下,因为我不明白我发现的例子背后有什么逻辑)是我见过很多人为你的ViewModel添加验证,因此复制我已经对我的实体所做的事情。没有办法直接使用我在我的实体上定义的合同?

此时解决方案的结构如此:

域层项目(实体和代码合同类)
数据访问层项目(Nhibernate与工作单元,存储库和映射)
业务规则项目(业务逻辑条件的WF4规则)

现在我要做什么?添加一个新的WPF项目,其中包含一个用于View的文件夹和一个用于ViewModel的文件夹?

P.S。 当我读到Caliburn时,我想使用那个框架,因为它似乎给了一些额外的帮助MVVM光(虽然我还没有明白什么)

1 个答案:

答案 0 :(得分:0)

  

阅读网上可以找到的各种指南,我发现很多   通过复制实体中的实体来创建MVVM模型的示例   镜像然后在ViewModel类中使用此模型。我不能   直接使用我的实体?

在一般情况下,没有理由不能直接使用您的实体。当然,您的域对象和您想要呈现的UI之间必然存在“接口不兼容”,但这正是视图模型应该解决的问题。

  

另一件事是我见过很多人为你加上验证   ViewModel,因此复制了我在我的实体上所做的事情。

通过“向viewmodel添加验证”并不清楚你的意思,但是直接向viewmodel添加验证规则(即业务逻辑)是错误。验证规则应该始终是某个域对象的一部分,这通常意味着模型本身。

  

无法直接使用我定义的合同   我的实体?

如果您已在构建选项中为合同启用了运行时检查,那么通过向绑定添加ExceptionValidationRule(或只是设置ValidatesOnExceptions),可以非常轻松地利用合同进行验证。

当然,这意味着您现在必须小心不要禁用运行时检查,但考虑到您已经依赖它们来强制执行不应成为问题的合同。