mvvm的功能区分问题

iiii5268 2021-03-25 10:32:36
简单来说,在mvc架构中:
Model负责传输数据的结构定义(传输的数据包含哪些项)以及部分实例方法(tostring之类)
Controller负责控制数据获取到Model,并传输到View
View负责显示数据,提供交互(就是召唤controller)

在mvp架构中,p取代了controller的功能,并且把数据存取分给了Model,自己只负责Model与VIew的交互

那么 MVVM架构中,Model与 ViewModel的角色又是什么呢?
看网上大部分教程的理论,Model还是负责数据存取,ViewModel负责操作View提供交互,VIew继续负责显示,那MVVM和MVP的区别在哪?
似乎所有MVVM和MVP的结构图都是ViewModel(Presenter)与VIew有交互,而与Model是单向调用,那这俩框架区别何在?
以上,无聊玩wpf突然出现的疑问,研究不深,恳请大神指出错漏错漏
...全文
176 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
你看把我们就拿你们喜欢网站做比方 vue---------api网关服务----组合到各种设计所谓的DDD,wcf,mvc,分层----------而这些ddd,wcf,mvc,分层里又自己相互套,比如wcf套个3层可以把,然后这个3层又可以号称自己是DDD可以把,然后这个做DDD的有可以说我按mvc提供api可以把 在说vue,vue自己是mvvm没问题把,但他自己还用路由那么我们可以说他还套了mvc可以把,同时我在vue里用个jquery组件可以把,你现在说他是什么mvp么
回复
不要学究化。因为毫无用处 mvc 给了vue--而vue又是mvvm 所以你这种讨论毫无意义,正常情况其实是一层套一层,大家根据自己面对的情况选择 大mvc 套 小mvc,小mvc套3层,3层套个小mvc,小mvc合并成大service,大serivce在套小mvvm,小mvvm在套小mvc 所以,你们研究这个有什么意义???
回复
而,提倡view model的好处, 其实也是解耦。 假设数据库修改,对应的model也修改。 那么只需要修改中间model 映射到 view model的逻辑关系。 然而前台是可以纹丝不动的。
回复
这里,其实只要明白一点, 也就是你问题中的“Model与 ViewModel的角色又是什么呢?” 通常来说,model就是数据库的映射字段。 而viewmodel,是前台需要展示的字段。 两者的区别,其实在用户登录功能里,最明显。 假设,一个用户登陆成功,你去数据库抓取了用户信息。 但是对于展示该用户的信息,你一般不需要暴露用户密码 所以,其实这里就出现viewmodel的一部分用途了。 也就是一个只需要对应view的model,这里是不需要展示密码的, 所以在Model 映射到 view model 时,这个viewmodel 没有密码字段。 另一部分,mvvm中,viewmodel具有双向绑定的功能。 也就是前端/后端的修改,都能直接反应在另一端。 不过基于web端,诸如vue的前端框架存在,所以我们不太需要使用inotifypropertychanged再去弄了。
回复
引用 6 楼 iiii5268 的回复:
[quote=引用 2 楼 正怒月神 的回复:]这里,其实只要明白一点,
也就是你问题中的“Model与 ViewModel的角色又是什么呢?”
通常来说,model就是数据库的映射字段。
而viewmodel,是前台需要展示的字段。

两者的区别,其实在用户登录功能里,最明显。
假设,一个用户登陆成功,你去数据库抓取了用户信息。
但是对于展示该用户的信息,你一般不需要暴露用户密码
所以,其实这里就出现viewmodel的一部分用途了。
也就是一个只需要对应view的model,这里是不需要展示密码的,
所以在Model 映射到 view model 时,这个viewmodel 没有密码字段。

另一部分,mvvm中,viewmodel具有双向绑定的功能。
也就是前端/后端的修改,都能直接反应在另一端。
不过基于web端,诸如vue的前端框架存在,所以我们不太需要使用inotifypropertychanged再去弄了。

额………………这些我大概能了解,我的意思其实大概是你说 的“去数据库抓取了用户信息”这一步,是发生在哪一层的,即model层只是数据库的映射字段,而vm只是在和前端完成交互,那么将数据存到映射字段是哪层的任务呢?[/quote]
抓数据在dal啊。
这就回到了前面 wanghui 说的。
你不能说我用 mvvm,然后就不能用 三层架构了。
你用mvc,也不会把数据库链接,业务逻辑等等全放controller层,会放到service,然后service调用的是dal等等之类。
回复
iiii5268 03-26
引用 4 楼 wanghui0380 的回复:
不要学究化。因为毫无用处 mvc 给了vue--而vue又是mvvm 所以你这种讨论毫无意义,正常情况其实是一层套一层,大家根据自己面对的情况选择 大mvc 套 小mvc,小mvc套3层,3层套个小mvc,小mvc合并成大service,大serivce在套小mvvm,小mvvm在套小mvc 所以,你们研究这个有什么意义???
那个啥………………我只是想知道mvvm的每个部分的功能划分而已
回复
iiii5268 03-26
引用 2 楼 正怒月神 的回复:
这里,其实只要明白一点, 也就是你问题中的“Model与 ViewModel的角色又是什么呢?” 通常来说,model就是数据库的映射字段。 而viewmodel,是前台需要展示的字段。 两者的区别,其实在用户登录功能里,最明显。 假设,一个用户登陆成功,你去数据库抓取了用户信息。 但是对于展示该用户的信息,你一般不需要暴露用户密码 所以,其实这里就出现viewmodel的一部分用途了。 也就是一个只需要对应view的model,这里是不需要展示密码的, 所以在Model 映射到 view model 时,这个viewmodel 没有密码字段。 另一部分,mvvm中,viewmodel具有双向绑定的功能。 也就是前端/后端的修改,都能直接反应在另一端。 不过基于web端,诸如vue的前端框架存在,所以我们不太需要使用inotifypropertychanged再去弄了。
额………………这些我大概能了解,我的意思其实大概是你说 的“去数据库抓取了用户信息”这一步,是发生在哪一层的,即model层只是数据库的映射字段,而vm只是在和前端完成交互,那么将数据存到映射字段是哪层的任务呢?
回复
一品梅 03-25
区别再V(viewmodel)上
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2021-03-25 10:32
社区公告

让您成为最强悍的C#开发者