MVVM模式在嵌入式GUI AWTK 中的实现

2019-12-12  本文已影响0人  李先静

AWTK-MVVM是一套为AWTK用C语言开发,并支持各种脚本语言的MVVM框架,实现了数据绑定、命令绑定和窗口导航等基本功能,使用AWTK-MVVM开发应用程序,无需学习AWTK本身的API,只需学习绑定规则和Model的实现方式即可。

1.1 分离用户界面和业务逻辑

在开发应用程序时,要把用户界面和业务逻辑分离开来,这是每个程序员都知道的常识。分离用户界面和业务逻辑有几个重要的好处:

  1. 有利于隔离变化。用户界面是最容易变化的,易用性的改进,外观的美化和需求的变化,首先冲击的就是用户界面。如果用户界面和业务逻辑耦合到一起,界面上一点微小的改动都会导致一系列代码的修改,这不但会增加开发的成本和周期,而且这种改进也是很无趣的,让程序员的幸福感直线下降。

  2. 有利于自动测试。代码中的BUG,越早被发现,修改的成本越低,而单元测试是在早期发现BUG的重要手段。单元测试是自动化的,前期编写测试代码的投入,会因为后期节省测试的时间而获得回报。单元测试代码可以不断积累,为软件构建一道坚固的防火墙,让整个系统越来越稳定。分离用户界面和业务逻辑是提高代码可测试性的重要手段,让编写单元测试程序成为可能。

  3. 有利于分工合作。用户界面和业务逻辑的耦合,会让用户界面的修改很困难,程序员就会抵触用户界面的改动,让设计师和程序员之间的矛盾加大。分离用户界面和业务逻辑后,设计师的工作成果可以平滑的输出给程序员,让程序员和设计师一起过上共同幸福的生活。

1.2 如何分离用户界面和业务逻辑

分离用户界面和业务逻辑,MVVM是目前最常用的模式。MVVM并非凭空出现,而是由MVC和MVP一路演化而来的,每次演化都是为了解决之前没有解决的问题。

1.2.1 MVC模式

MVC是Model-View-Controller简称,它首次把系统分成Model,View和Controller这三部分,明确的把用户界面和业务逻辑分离开来:

mvc

控制器(Controller)不是业务逻辑,理论上只是很薄的一个胶合层,但是很多新手把业务逻辑写在控制器里,导致模型只剩下数据了,让人产生控制器就是业务逻辑,模型就是数据的错觉。

1.2.2 MVP模式

MVC模式解决分离用户界面和业务逻辑的问题,但是还有一个重要的问题没有解决: 控制器是界面相关的,没有办法为控制器编写单元测试程序。为了解决上面的问题,MVP模式应运而生。MVP是Model-View-Presenter简称。

mvc

从理论上讲,MVP模式已经很完备了,它很好的分离的界面和实现,也可以为呈现逻辑编写单元测试程序了。但是从工程角度来看,MVP却有一个非常致命的缺陷:要编写大量无聊的代码!

为了方便说明,我们以一个编辑图书信息例子,看看要写哪些无聊的代码。这个例子非常简单,却要写不少无聊的代码:

这些代码很简单却很无聊,在每个有界面的模块中,都遵循同样的规律,却又完全不同,不得不重新编写。

1.2.3.MVVM模式

把MVP模式这些规律找出来进行抽象,通过一些规则在视图和模型建立联系,也就是数据绑定和命令绑定,就形成了MVVM模式。MVVM是Model-View-ViewModel简称。在MVVM中:

呈现逻辑Presenter去哪里了?呈现逻辑从一行行代码变成了一条条数据绑定和命令绑定的规则,对规则的处理和解释成了MVVM框架或公用库,可以在多个项目中共享。

mvvm

MVVM模式有下列好处:

视图模型和模型并不相同,之所以要引入视图模型,主要原因有:

MVVM 的缺点。

以上这些问题在手机和PC上,已经不是什么大问题了,但对于嵌入式系统来说,仍然是难以跨越的障碍,所以目前几乎没有针对嵌入式平台开发的MVVM框架。

1.3 AWTK-MVVM

AWTK-MVVM是一套用C语言开发的,专门为嵌入式平台优化的MVVM框架。它实现了数据绑定、命令绑定和窗口导航等基本功能,使用AWTK-MVVM开发应用程序,无需学习AWTK本身的API,只需学习绑定规则和模型的实现方式即可。

与其它MVVM框架相比,AWTK-MVVM特点有:

这里支持的多种编程语言与AWTK的脚本绑定是完全不相关的概念:这里是让应用程序的业务逻辑可以用不同的语言来开发,而AWTK的脚本绑定是让应用程序可以使用不同的脚本语言来调用AWTK的API。

AWTK-MVVM也有些限制,目前不支持界面元素动态生成,这时可以结合传统的方法开发。以后AWTK会支持WEB前端流行的框架如Reactjs和Vuejs,在高端平台(如手机、小程序和桌面程序)中应用。

在后面的章节中,我们将详细介绍AWTK-MVVM的具体用法。## 第8章

1.1 分离用户界面和业务逻辑

在开发应用程序时,要把用户界面和业务逻辑分离开来,这是每个程序员都知道的常识。分离用户界面和业务逻辑有几个重要的好处:

  1. 有利于隔离变化。用户界面是最容易变化的,易用性的改进,外观的美化和需求的变化,首先冲击的就是用户界面。如果用户界面和业务逻辑耦合到一起,界面上一点微小的改动都会导致一系列代码的修改,这不但会增加开发的成本和周期,而且这种改进也是很无趣的,让程序员的幸福感直线下降。

  2. 有利于自动测试。代码中的BUG,越早被发现,修改的成本越低,而单元测试是在早期发现BUG的重要手段。单元测试是自动化的,前期编写测试代码的投入,会因为后期节省测试的时间而获得回报。单元测试代码可以不断积累,为软件构建一道坚固的防火墙,让整个系统越来越稳定。分离用户界面和业务逻辑是提高代码可测试性的重要手段,让编写单元测试程序成为可能。

  3. 有利于分工合作。用户界面和业务逻辑的耦合,会让用户界面的修改很困难,程序员就会抵触用户界面的改动,让设计师和程序员之间的矛盾加大。分离用户界面和业务逻辑后,设计师的工作成果可以平滑的输出给程序员,让程序员和设计师一起过上共同幸福的生活。

1.2 如何分离用户界面和业务逻辑

分离用户界面和业务逻辑,MVVM是目前最常用的模式。MVVM并非凭空出现,而是由MVC和MVP一路演化而来的,每次演化都是为了解决之前没有解决的问题。

1.2.1 MVC模式

MVC是Model-View-Controller简称,它首次把系统分成Model,View和Controller这三部分,明确的把用户界面和业务逻辑分离开来:

mvc

控制器(Controller)不是业务逻辑,理论上只是很薄的一个胶合层,但是很多新手把业务逻辑写在控制器里,导致模型只剩下数据了,让人产生控制器就是业务逻辑,模型就是数据的错觉。

1.2.2 MVP模式

MVC模式解决分离用户界面和业务逻辑的问题,但是还有一个重要的问题没有解决: 控制器是界面相关的,没有办法为控制器编写单元测试程序。为了解决上面的问题,MVP模式应运而生。MVP是Model-View-Presenter简称。

mvc

从理论上讲,MVP模式已经很完备了,它很好的分离的界面和实现,也可以为呈现逻辑编写单元测试程序了。但是从工程角度来看,MVP却有一个非常致命的缺陷:要编写大量无聊的代码!

为了方便说明,我们以一个编辑图书信息例子,看看要写哪些无聊的代码。这个例子非常简单,却要写不少无聊的代码:

这些代码很简单却很无聊,在每个有界面的模块中,都遵循同样的规律,却又完全不同,不得不重新编写。

1.2.3.MVVM模式

把MVP模式这些规律找出来进行抽象,通过一些规则在视图和模型建立联系,也就是数据绑定和命令绑定,就形成了MVVM模式。MVVM是Model-View-ViewModel简称。在MVVM中:

呈现逻辑Presenter去哪里了?呈现逻辑从一行行代码变成了一条条数据绑定和命令绑定的规则,对规则的处理和解释成了MVVM框架或公用库,可以在多个项目中共享。

mvvm

MVVM模式有下列好处:

视图模型和模型并不相同,之所以要引入视图模型,主要原因有:

MVVM 的缺点。

以上这些问题在手机和PC上,已经不是什么大问题了,但对于嵌入式系统来说,仍然是难以跨越的障碍,所以目前几乎没有针对嵌入式平台开发的MVVM框架。

1.3 AWTK-MVVM

AWTK-MVVM是一套用C语言开发的,专门为嵌入式平台优化的MVVM框架。它实现了数据绑定、命令绑定和窗口导航等基本功能,使用AWTK-MVVM开发应用程序,无需学习AWTK本身的API,只需学习绑定规则和模型的实现方式即可。

与其它MVVM框架相比,AWTK-MVVM特点有:

这里支持的多种编程语言与AWTK的脚本绑定是完全不相关的概念:这里是让应用程序的业务逻辑可以用不同的语言来开发,而AWTK的脚本绑定是让应用程序可以使用不同的脚本语言来调用AWTK的API。

AWTK-MVVM也有些限制,目前不支持界面元素动态生成,这时可以结合传统的方法开发。以后AWTK会支持WEB前端流行的框架如Reactjs和Vuejs,在高端平台(如手机、小程序和桌面程序)中应用。

在后面的章节中,我们将详细介绍AWTK-MVVM的具体用法。

上一篇 下一篇

猜你喜欢

热点阅读