【问题标题】:Passing domain model business entity to UI layer question将领域模型业务实体传递给 UI 层问题
【发布时间】:2011-11-18 22:31:46
【问题描述】:

将领域模型实体直接传递给 UI 层而不是相应的视图模型是否可以接受?

在我的示例中,UI 获取一些用户数据并将其传递给与域服务交互的演示者。域服务对来自用户的数据执行一些操作,并将输出结果作为域模型实体返回给 UI,通常应将其转换为视图模型。

问题在于,根据检查返回结果的用户选择(Y 或 N),它可能会返回给服务进行进一步处理并最终保存到存储库。

如果我们不在这两个步骤之间的某处保存返回的域实体,而是使用视图模型,我们将无法将其传回以进行进一步处理。

在发生此类用户交互时是否有一些解决方法?

【问题讨论】:

    标签: c# domain-driven-design entity viewmodel mvp


    【解决方案1】:

    我宁愿建议将presentation model 与域模型分开,无论是在视图模型(在 MVVM 中)还是在 MVC / MVP 中的模型方面,因为在中到高域复杂性中,您根据业务来设计域模型逻辑和面向对象的设计具有除表示数据之外的粒度级别,当您绑定或呈现数据时,您倾向于显示部分域模型并将某些对象展平为大陆以进行表示。

    另一方面是在开发分布式应用程序时,有时您需要通过服务(远程外观)公开您的数据,因此最好根据 DTO 公开您的对象而不是公开您的域模型,因为 DTO 的方面又是不同的在复杂性和粒度方面,不要强迫你的领域模型被破坏为对演示友好或对消费者友好,不要破坏你的演示模型和消费者使用面向业务的域模型并增加采用它们进行演示的复杂性。

    【讨论】:

    • 模型在“专业 ASP.NET 设计模式”中是分开的,但问题是如何在向用户呈现 DTO 时处理 UI 交互仍未得到解答
    • 您可以将交互分为两类: 读取:这只是返回要呈现给用户的 DTO 的只读查询。写:或者更好的命名命令,它是只写命令,对域实体进行操作并执行逻辑..尝试将读和写的概念分开,这是CQRS架构的多种形式。检查(moh-abed.com/2011/09/13/pure-old-ddd-with-a-twist-from-cqrs)
    • Domain 层需要将 ModelEntity 传递给 User 进行调查。我们可以将其转换为 DTO。然后用户决定是否在域层中进一步处理该实体。问题是如果我们使用 DTO,在哪里存储 ModelEntity 以允许域层在用户操作后进一步处理它?这样做的模式是什么?
    • 如果全部是关于动作,您可以代替 DTO 创建一个包含处理所需数据的 Command 对象,然后应用层接受此命令并将其作为域模型上的动作执行。
    • 没有解决在命令体中将域对象传递给 UI 层供用户检查的问题
    【解决方案2】:

    MVP 是围绕View、Presenter 和Model 的概念定义的。您没有理由需要区分域实体和视图 Model。它们可以(并且应该)是同一件事。

    与MVVM 不同,模型在绑定到View 中的作用较小。演示者负责使用模型数据来操作视图。在 MVP 中没有 ViewModel 这样的概念。该术语通常保留给MVVM,其中ViewModel 是与View 紧密耦合的实体,此外还有Model。

    【讨论】:

    • 我想说,由于视图模型与视图的耦合,视图模型而不是模型视图更适用于 MVVM,也就是说,它更像是“视图模型”而不是“模型视图”
    • 对不起,我的意思是 ViewModel,如 Model View ViewModel。
    • 好的,在使用 ViewmMdels 的情况下我们该如何进行呢?我指的是“专业 ASP.NET 设计模式”一书的应用程序架构。如果需要在域模型实体的连续处理和用户获取 ViewModel 之间进行用户交互,有什么解决方法?
    • 你遵循什么模式?
    • 我正在使用 DDD 设计。具有服务和业务实体的域模型。上面是MVP。 Presenter 包含必要的服务和视图。一些业务实体相当复杂,有些视图需要显示有关业务实体的一些摘要。无需将整个实体传递给视图。我转换为例如MyEntity -> MyEntitySummaryView。我想这是某种 MVP-VM 模式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2014-02-24
    • 2013-02-21
    相关资源
    最近更新 更多