模型视图视图模型中的模型

9
除非我误解了 - 我读到的大部分关于MVVM的文章都将MVVM中的模型解释为持有领域/业务逻辑的部分,但让我困惑的是MVVM是一个表示层模式,表示层并不完全持有业务逻辑。请问有人能帮我理解业务层中的领域逻辑如何映射到表示层中的模型,MVVM中的模型实际上是DTO吗?如果有人能用一个例子来解释业务层如何映射到SOA中的MVVM模型(业务逻辑位于Web服务之后),我会很感激的。谢谢。

请查看我在这里的回答以及人们对它的评论。我认为太多时候MVC和MVVM被误解了,人们认为那里的模型和控制器正在替换DataModel和业务逻辑。在我的看法中,MVVM和MVC都只是在UI层面上保持UI组合与一些基本实体操作或其他UI逻辑分离,因此我认为我在那里的答案适用于MVC和MVVM。 - Davide Piras
抱歉,我看不到任何URL,请您编辑并重新发布。谢谢。 - Rohit Sharma
抱歉,我忘了它 :D https://dev59.com/gms05IYBdhLWcg3wD9wB#7474357 - Davide Piras
3个回答

2
MVVM(Model-View-ViewModel)与MVC(Model-View-Controller)一样,是一种分离展示的形式,旨在实现将UI逻辑和状态以及业务域逻辑和状态之间的关注点分离。因此,MVVM并不真正规定模型部分采取的形式,只要它与展示相关的问题分开即可。
模型故意不与应用程序的展示方面耦合或依赖于任何方式,但除此之外,有许多不同的方法来实现三元组中的“M”部分。特别是,它不必映射到单个对象:它可以意味着与返回数据传输对象(DTO)的服务进行交互,可以意味着发布和订阅消息总线上的消息,或者可以意味着检索表示域中实体的领域对象,调用它们的方法,然后将它们持久化。
MVVM模式中真正独特的是ViewModel的角色,因为它的目的是以可以被具有丰富数据绑定功能的视图技术消耗的方式来表示UI的状态。如果没有丰富的数据绑定支持,则会使用其他形式的分离展示,例如MVC或MVP,但“M”部分仍然可以相同,因为它根据定义独立于UI技术。这是重要的因素。

1

MVVM中的Model并不是DTO。DTO是数据传输对象,更像实体类。它主要用于在不同层之间传输数据,例如从表示层到业务层或从业务层到数据访问层。

而Model主要包含业务逻辑。表示层通过ViewModel根据需要调用Model的业务逻辑。


0
非常频繁的情况是Model本身被ViewModel所封装。当设计中单个ViewModel使用不同的Models时,必须分离Model和ViewModel。但实际上这种情况很少见,因此ViewModel可以直接与服务交互。
如果单个ViewModel可以服务于不同类型的Models,这些Models可以逐一替换 - 引入单独的Models层,通过接口进行抽象,并注入到相应的ViewModels中。否则,View和ViewModel就足够了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接