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突然出现的疑问,研究不深,恳请大神指出错漏错漏
...全文
270 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2021-03-26
  • 打赏
  • 举报
回复
你看把我们就拿你们喜欢网站做比方 vue---------api网关服务----组合到各种设计所谓的DDD,wcf,mvc,分层----------而这些ddd,wcf,mvc,分层里又自己相互套,比如wcf套个3层可以把,然后这个3层又可以号称自己是DDD可以把,然后这个做DDD的有可以说我按mvc提供api可以把 在说vue,vue自己是mvvm没问题把,但他自己还用路由那么我们可以说他还套了mvc可以把,同时我在vue里用个jquery组件可以把,你现在说他是什么mvp么
wanghui0380 2021-03-26
  • 打赏
  • 举报
回复
不要学究化。因为毫无用处 mvc 给了vue--而vue又是mvvm 所以你这种讨论毫无意义,正常情况其实是一层套一层,大家根据自己面对的情况选择 大mvc 套 小mvc,小mvc套3层,3层套个小mvc,小mvc合并成大service,大serivce在套小mvvm,小mvvm在套小mvc 所以,你们研究这个有什么意义???
正怒月神 2021-03-26
  • 打赏
  • 举报
回复
而,提倡view model的好处, 其实也是解耦。 假设数据库修改,对应的model也修改。 那么只需要修改中间model 映射到 view model的逻辑关系。 然而前台是可以纹丝不动的。
正怒月神 2021-03-26
  • 打赏
  • 举报
回复
这里,其实只要明白一点, 也就是你问题中的“Model与 ViewModel的角色又是什么呢?” 通常来说,model就是数据库的映射字段。 而viewmodel,是前台需要展示的字段。 两者的区别,其实在用户登录功能里,最明显。 假设,一个用户登陆成功,你去数据库抓取了用户信息。 但是对于展示该用户的信息,你一般不需要暴露用户密码 所以,其实这里就出现viewmodel的一部分用途了。 也就是一个只需要对应view的model,这里是不需要展示密码的, 所以在Model 映射到 view model 时,这个viewmodel 没有密码字段。 另一部分,mvvm中,viewmodel具有双向绑定的功能。 也就是前端/后端的修改,都能直接反应在另一端。 不过基于web端,诸如vue的前端框架存在,所以我们不太需要使用inotifypropertychanged再去弄了。
正怒月神 2021-03-26
  • 打赏
  • 举报
回复
引用 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 2021-03-26
  • 打赏
  • 举报
回复
引用 4 楼 wanghui0380 的回复:
不要学究化。因为毫无用处 mvc 给了vue--而vue又是mvvm 所以你这种讨论毫无意义,正常情况其实是一层套一层,大家根据自己面对的情况选择 大mvc 套 小mvc,小mvc套3层,3层套个小mvc,小mvc合并成大service,大serivce在套小mvvm,小mvvm在套小mvc 所以,你们研究这个有什么意义???
那个啥………………我只是想知道mvvm的每个部分的功能划分而已
iiii5268 2021-03-26
  • 打赏
  • 举报
回复
引用 2 楼 正怒月神 的回复:
这里,其实只要明白一点, 也就是你问题中的“Model与 ViewModel的角色又是什么呢?” 通常来说,model就是数据库的映射字段。 而viewmodel,是前台需要展示的字段。 两者的区别,其实在用户登录功能里,最明显。 假设,一个用户登陆成功,你去数据库抓取了用户信息。 但是对于展示该用户的信息,你一般不需要暴露用户密码 所以,其实这里就出现viewmodel的一部分用途了。 也就是一个只需要对应view的model,这里是不需要展示密码的, 所以在Model 映射到 view model 时,这个viewmodel 没有密码字段。 另一部分,mvvm中,viewmodel具有双向绑定的功能。 也就是前端/后端的修改,都能直接反应在另一端。 不过基于web端,诸如vue的前端框架存在,所以我们不太需要使用inotifypropertychanged再去弄了。
额………………这些我大概能了解,我的意思其实大概是你说 的“去数据库抓取了用户信息”这一步,是发生在哪一层的,即model层只是数据库的映射字段,而vm只是在和前端完成交互,那么将数据存到映射字段是哪层的任务呢?
一品梅 2021-03-25
  • 打赏
  • 举报
回复
区别再V(viewmodel)上

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧