将域模型业务实体传递给UI层问题

时间:2011-09-16 19:01:27

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

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

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

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

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

进行此类用户交互时是否有一些解决方法?

2 个答案:

答案 0 :(得分:1)

MVP是围绕ViewPresenterModel的概念定义的。您无需区分域实体和视图 Model。他们可以(而且应该)是同一件事。

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

答案 1 :(得分:1)

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

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