【问题标题】:Can entity of domain layer be my model in MVVM pattern?领域层的实体可以成为我在 MVVM 模式中的模型吗?
【发布时间】:2014-07-11 06:36:25
【问题描述】:

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

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

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

另一件事(尽管在这里我必须多研究一点,因为我不明白我发现的示例背后的逻辑是什么)是我看到很多人向您的 ViewModel 添加验证,从而复制了我已经完成了我的实体。无法直接使用我在实体上定义的合同?

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

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

现在我该怎么办?添加一个新的 WPF 项目,其中一个文件夹用于视图,一个文件夹用于 ViewModel?

附: 当我读到 Caliburn 的权利时,我想使用该框架,因为它似乎提供了一些额外的帮助 MVVM 灯(虽然我还不明白是什么)

【问题讨论】:

    标签: c# validation mvvm mvp caliburn.micro


    【解决方案1】:

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

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

    另一件事是,我看到很多人将验证添加到您的 ViewModel,从而复制我在实体上所做的工作。

    您所说的“向视图模型添加验证”并不完全清楚,但直接向视图模型添加验证规则(即业务逻辑)是明显的错误。验证规则应该始终是某个域对象的一部分,这通常意味着模型本身。

    没有办法直接使用我定义的合同 我的实体?

    如果您在构建选项中为您的合约启用了运行时检查,那么通过将ExceptionValidationRule 添加到绑定(或简单地设置ValidatesOnExceptions)来利用合约进行验证非常容易。

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

    【讨论】:

    • 例如,在 Ryan Vice 的“企业架构的 MVVM 生存指南”中,我看到他将 entityFramework 制作的每个 DTO 对象映射到模型类,这对我来说似乎很奇怪
    • @gt.guybrush:显然这本书提供了一些理由,但我没有读过它,所以我无法评论。
    • ValidatesOnExceptions 似乎很好,更简单地做任何我发现的事情
    • 但是我们可以说使用域对象更简单和线性吗?没有太大的缺点
    • @gt.guybrush:这是一个笼统的说法,人们应该对此保持警惕。 如果没有其他信息那么是的。
    猜你喜欢
    • 1970-01-01
    • 2015-05-30
    • 2015-12-30
    • 2020-08-05
    • 2014-04-03
    • 2012-02-20
    • 2023-03-07
    • 2016-03-14
    • 1970-01-01
    相关资源
    最近更新 更多