当前位置: 首页 > wzjs >正文

昆山网站优化微信手机网站

昆山网站优化,微信手机网站,做公司网站公司,天元建设集团有限公司简介以前学习MVVM模式时写了一篇《MVC、MVP和MVVM》。近来重读,有了一些新想法。从MVC模式到MVVM模式的变化,体现出在技术推动下,界面构造方法从传统的过程式向声明式演进。从“在坐标(x,y)到(a,b)之间绘制一个红色矩形”到“坐标(x,y)到(a,b)之间…

以前学习MVVM模式时写了一篇《MVC、MVP和MVVM》。近来重读,有了一些新想法。从MVC模式到MVVM模式的变化,体现出在技术推动下,界面构造方法从传统的过程式向声明式演进。从“在坐标(x,y)到(a,b)之间绘制一个红色矩形”到“坐标(x,y)到(a,b)之间存在一个红色矩形”。

我们先简单了解一下从MVC到MVVM的演进过程。

图1  从MVC到MVVM的演进过程

从上图可以看出,业务发展引发界面复杂度超出过程式构造方法适用范围,为演进提供了驱动力和必要性。而数据绑定等自动化技术的突破为演进提供了路径和可行性。在两种要素的推动下,MVC最终演进为MVVM。

1. MVC:解耦业务逻辑/过程式渲染

在早期的应用中,业务逻辑、界面渲染和用户交互代码常常混合在一起,导致软件难以维护和进化。MVC通过引入一个中间层(Controller)对业务逻辑解耦,解决了这个问题。MVC模型包含3个概念:执行业务逻辑的Model、负责展示的View、处理用户输入,协调Model和View的Controller。三者的静态结构和动态结构如下:

图2  MVC模型静态结构

图3  MVC模型动态结构

代码1  MVC模型代码示例

class Controller {Model model;View view;void onClick() {  UserInput userInput = view.getUserInput();model.operate(userInput);Data newData = model.getData();view.getTextView().setText(newData.getText());}  
}

MVC完成了业务逻辑的解耦,但界面渲染和用户交互的解耦并不彻底。Controller既处理用户输入,又负责更新View。随着业务逻辑逐渐复杂,Controller代码变得臃肿,难以维护。Controller是一个重要的协调者,但由于存在对View的依赖,Controller难以进行测试。从渲染的角度来看,渲染的过程是被动和过程式的。每次更新界面,Controller向View发出绘制指令,View根据指令绘制界面。这个过程中需要编写大量的代码绘制界面。

2. MVP:解耦渲染指令/半声明式渲染

MVP进一步对界面渲染指令进行解耦,同样的方法,引入中间层。MVP包含3个主要概念,Model、View和Presenter。看起来只是给Controller换了个名字,实际上MVP完成了渲染指令的解耦。View不再暴露底层渲染指令,而是提供高层级的更新界面方法。同时为了便于测试,MVP将View提供的高层级的更新界面方法封装成接口,构成了MVP中的一个隐含概念:ViewInterface。Presenter不再依赖View,而是采用面向接口编程原则,让Presenter和View共同依赖于ViewInterface。

图4  MVP模型静态结构

图5  MVP模型动态结构

代码2  MVP模型代码示例

class Presenter {Model model;// Presenter不再直接依赖于View,而是依赖于ViewInterface。ViewInterface viewInterface;  void onClick() {  UserInput userInput = view.getUserInput();model.operate(userInput);Data newData = model.getData();// Presenter不再直接执行底层绘制指令,而是调用高层界面更新接口。viewInterface.update(newData);}  }  class View {View() {addClickListener(event -> presenter.onClick())}}

在MVC中,驱动者Controller直接调用底层渲染指令。而在MVP中,驱动者Presenter调用高层界面更新方法,由View决定具体执行的底层渲染指令。MVP是由过程式向声明式转变的中间状态。

3. MVVM:自动渲染/声明式渲染

MVP将渲染指令封装在View中,将驱动者和渲染指令解耦。但这仍然是不彻底的,仍然需要在View中编写大量的渲染代码。MVVM则更进一步,利用数据绑定机制,实现了声明式界面构建。驱动者ViewModel只需要声明预期的界面效果,数据绑定机制完成由效果到渲染指令的转换,实现自动渲染。在MVVM中,已经不再需要手动编写渲染代码。

图6  MVVM模型静态结构

图7  MVVM模型动态结构

代码3  MVVM模型代码示例

class ViewModel {Model model;// 通过数据绑定直接获取用户输入。@DataBind String userInput;@ViewBind String outputText;void onClick() {  model.operate(userInput);Data newData = model.getData();// 通过数据绑定自动更新界面。outputText = newData.getText();}  }  class View {View() {addClickListener(event -> viewModel.onClick())}}

4. 从过程式走向声明式

从MVC到MVVM体现了软件界面构造方法从过程式向声明式的演进过程。类似的演进在不同领域也曾发生过,数据库查询语句也从命令式代码演进为声明式SQL。可见这是一条必经之路。当下,一场更深刻的变更正在进行中,软件开发活动自身正在从过程式人工编码向声明式AI代码生成演进。当然这篇文章存在很大的发布即过时的风险,原因不在于过程式AI代码生成,而是AI赋能让软件正在从功能容器向能力宿主转变,传统的界面设计工具和方法,无论是用户旅程图、MVC、MVP还是MVVM,可能会快速失去使用场景。


文章转载自:

http://IucxaREF.rcyrm.cn
http://M8NUOR6r.rcyrm.cn
http://1dDBOVGh.rcyrm.cn
http://L9t3XBo0.rcyrm.cn
http://9Lb1EKi0.rcyrm.cn
http://VjxUJv80.rcyrm.cn
http://tQ7YcV2A.rcyrm.cn
http://lmfKSbtO.rcyrm.cn
http://1X90AupA.rcyrm.cn
http://cY28tnHS.rcyrm.cn
http://nZ0y73y1.rcyrm.cn
http://8LZhLR3N.rcyrm.cn
http://tgnUay5j.rcyrm.cn
http://NQ3GlfLV.rcyrm.cn
http://wxwAyLfK.rcyrm.cn
http://5NDS3mEN.rcyrm.cn
http://s0cWzuQC.rcyrm.cn
http://i4UWd9QJ.rcyrm.cn
http://13baLqyL.rcyrm.cn
http://O6PVTlkt.rcyrm.cn
http://zP4oknp1.rcyrm.cn
http://3WRabjRP.rcyrm.cn
http://WdVfZAsk.rcyrm.cn
http://3PXrdPmP.rcyrm.cn
http://CNF8u392.rcyrm.cn
http://bV9wJZtG.rcyrm.cn
http://hqH8CRtA.rcyrm.cn
http://lJacxDZm.rcyrm.cn
http://5ogn9EIJ.rcyrm.cn
http://JrIgZTqd.rcyrm.cn
http://www.dtcms.com/wzjs/695642.html

相关文章:

  • 品牌网站开发背景清明节ppt模板免费下载
  • 深圳市盐田区住房和建设局网站济南官网
  • 求个国外在线网站杭州 网站开发
  • 好网站网络推广员压力大吗
  • 门窗网站模板百度快速排名优化技术
  • 青岛建设银行网站首页深圳做网站d
  • 商城网站的基本功能做网站济南西
  • 网站节点加速如何做app软件开发
  • 辽宁网站建设论坛计算机网站开发是什么专业
  • 江宁网站建设价位大公司网站开发
  • 做公司网站有没有必要数字货币网站开发需求
  • 京东商城网站建设分析秦皇岛金洋建设集团网站
  • 有没有专业做steam创客的网站个人网站开发的意义
  • 全网营销一站式推广网站页面设计怎么分析
  • 如何让百度快速收录网站wordpress 请选择一个文件夹
  • 网页小游戏免费秒玩wordpress 优化变快
  • 东莞做网站dgjcwl网站中文商标域名注册
  • 网站建设丿金手指下拉h5做的网站
  • 做小程序好还是做微网站好小游戏网站怎么做
  • 内网 做 网站seo的培训课程
  • 自己能够做投票网站吗设计好的制作网站
  • 学校建设网站目标网站建设员的薪水
  • 网站的建设及发布步骤wordpress 禁止注册
  • 一个公司可以做多少网站潍坊搜索引擎优化
  • 黄石网站建设费用哈尔滨市城乡建设局官网
  • 响应式的学校网站手机视频制作软件排名
  • 免费建网站推广上海营销网站建设
  • 厦门网站建设工作室wordpress网站app
  • 网站建设文献翻译ps怎么做网站logo
  • 自己怎么来建设网站wordpress模板插件