先聊聊MVC
MVC已经是市面上大多数软件使用的常用架构了,它将应用程序分为三个部分:Model、View和Controller。Model负责处理应用程序的数据,View负责处理应用程序的UI,Controller负责处理控制view正确显示。
基于这种设计,我们通常会基于以下思路来进行业务的开发:
- View层通常是引擎提供的,我们需要在原有的基础上进行二次封装,满足我们的定制化需求。
- Controller 负责控制view的显示,通常我们需要从model中取得界面所需的数据,然后根据需求操作对应的界面组件,完成正常的显示。而在数据更改时,通常使用观察者模式来进行数据的更新,并且在接收到数据后,重新操作对应组件完成更新。
- model层基本与view和Controller解耦,专心负责数据的处理。
通过梳理MVC的业务开发思路,我们会发现一个问题,就是让controller负责连接view与model,并且保证数据的显示更新,这使得controller的代码量会变得很大,同时也会显得职责过重。
基于这些判断,我们可以再看看MVC的优缺点,然后继续往下看看MVVM的设计:
优点
- 实现了数据层与视图层的解耦
- 结构清晰,符合高内聚低耦合
缺点
- 业务逻辑与UI逻辑耦合在一起,显得控制层过于臃肿
MVVM是什么
MVVM是Model-View-ViewModel的缩写,它是一种基于数据驱动的UI架构,所以也可以称为model-view-binder。MVVM最早由微软提出,并在.NET Framework中得到了广泛的应用。
MVVM是一种架构模式,它将UI组件与业务逻辑分离,通过数据绑定来实现UI组件与业务逻辑之间的交互。MVVM的主要优点是降低了代码的耦合度,使得代码更加易于维护和扩展。
MVVM的实现
一些基础思想
- 数据驱动而不是事件驱动
- MVVM模式不同于MVC,在MVVM模式中,将ViewModel层绑定到View层后,它基本不使用点击事件,而是使用命令(Command)来控制。数据的显示也是不同于MVC,而是使用Binding来绑定相关数据。
MVVM中没有MVC模式的控制器,而是引入了一个绑定机制,来实现视图与数据的显示与更新。在我们的实现中,我们引入了两个概念,一个是signal,一个是viewModel
- signal: 负责提供MVVM中关键的数据绑定机制机制。
- viewModel: 负责为界面提供可依赖的原始数据。
完整的抽象为
- manager:原始的数据
- mediator: 完成数据绑定
- viewModel: 将数据提供给界面
- View :负责处理自身得到的数据
MVVM的实现原理主要分为以下几个步骤:
之后写了
MVVM 优缺点
优点
- 低耦合
- 可重用性
- 数据驱动
缺点
- 学习成本高
- 数据的绑定对于简单的UI操作是过渡的,对于更大的应用来说,数据的绑定开销又显得太大这不是我说的,这是MVVM的提出者说的引用维基