MVVM模式(简单比较MVC模式)

背景:学校教授以及平常项目使用的都是MVC模式(准确的说也不能是MVC模式,算是我自己比较垃圾的变种,总体上符合MVC模式的思想,但多了不少我自己为了项目编写方便的改动)
这学期新的课程介绍了MVVM模式,这门课的mini项目也会使用这个模式,写个帖子记录下学习两种模式的心得。

MVC

MVC(Model–View–Controller)模式是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。

模型(Model):Model 层包括了数据承载 Bean 和 业务处理 Bean,其中业务处理 Bean 分为 Service 和 Dao,分别对应业务逻辑和数据库操作。 Model 不关心它会被如何显示或是如何被操作。
视图(View):在 View 中一般没有程序上的逻辑。
控制器(Controller):起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应事件。控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

找到一张流传十分广的图片
在这里插入图片描述
但是,这里面的M和C层的职能有些模糊。在实际操作中估计还是会产生疑惑的。
结合当年实践课的经验,把model分为dao和service两层(我不确定这是否符合标准,但我认为这是符合MVC思想的)。把controller作为三层交流的核心,controller不做任何输出,而是作为view和model交流的媒介(当然某些情况下view也会和model进行交流的)

贴一个知乎链接:https://www.zhihu.com/question/22886622
(在里面看到了几个很有义气的回答)

去剪个头,回来继续写MVVM

MVVM

MVVM=Model+View+ViewModel

找资料的时候发现一个很有意思的结论:MVVM是MVC的增强版,实质上和MVC没有本质区别,只是代码的位置变动而已
正确与否我不评价,对MVVM有一定了解的人应该会在心中有自己的评价
![在这里插入图片描述](https://img-blog.csdnimg.cn/ce1afc206ec14fdeb20a8d32d52d63ef.png在这里插入图片描述
由于Controller主要用来处理各种逻辑和数据转化(我认为这里是印证了我上文的观点,controller作为交流的桥梁,自然需要对VIew和Model进行处理),复杂业务逻辑界面的Controller非常庞大,维护困难,所以有人想到把Controller的数据和逻辑处理部分从中抽离出来,用一个专门的对象去管理,这个对象就是ViewModel。view中数据变化将自动反映到viewmodel上,反之,model中数据变化也将会自动展示在页面上。把Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。

正好可以拿课上的项目展示:
在这里插入图片描述

这是一个MAUI+iservice的小项目,使用的是MVVM架构

ViewModel 和 View 之间的交互通过 Data Binding 完成,而 Data Binding 可以实现双向的交互,这就使得视图和控制层之间的耦合程度进一步降低。

<Button 
            Grid.Row="1"
            Grid.Column="0"
            Text="Initalize"
            Command="{Binding InitializeCommand}">

        </Button>

比较一下MVC和MVVM(中间似乎还有一个MVP)
首先是共有的Model和View,两者似乎并无太大差异。只是View和Model的链接方式有一定的区别
Controller和ViewModel:
使用ViewModel时,model不能再像使用controller时直接触发View。

在这里插入图片描述

最后贴一个链接:https://www.jianshu.com/p/2ad25e2769b5

写完文章发现自己对二者的了解还是不够深刻,希望读者谨慎阅读本文内容,希望不会对读者产生误导。虽然课程的深入,相信我会对MVVM和MVC模式有着更深刻的理解,到时一定会及时更新文章。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值