背景:学校教授以及平常项目使用的都是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有一定了解的人应该会在心中有自己的评价
,复杂业务逻辑界面的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模式有着更深刻的理解,到时一定会及时更新文章。