总览
QML应用程序架构最佳实践
为什么要关心界面,数据,逻辑分离的问题?
使用QML + Javascript作为主要编码语言,与其他语言和框架相比,这可以节省高达90%的代码。QML的简单性加快了开发速度,可定制性和可扩展性使其变得如此强大。
您也不必担心让UI内的值保持最新。凭借属性绑定的强大功能,QML项目及其属性会自动更新。
虽然所有这些功能都非常有用,但QML的易用性和灵活性也会导致问题。在幕后,属性在发生变化时会发出信号。因此,依赖于现在更改的值的其他属性将处理此信号并更新其值。这也适用于多个QML项目:
现在看起来并不复杂,但想象一下,添加了一些具有不同属性和交叉依赖性的新组件:
所有项目之间的不同联系就这样形成了。您无法再确定单个属性更改对直接或间接连接的组件可能产生的影响。在最坏的情况下,这可能导致循环依赖或循环。如果您遇到此类问题,这可能是错误组件架构的一个指标。
项目增长越多,这个问题就越大越大。因此,每个组件应具有干净的界面,并且只管理自己的数据。这就是关注点的分离意味着什么。
设计模式,如MVC,MVVM或Flux
每个应用程序的核心在于其数据。每个应用程序都会检索,处理,存储和显示某种特定于域和用例的信息。因此,以干净的方式管理和存储数据至关重要。
糟糕的组件架构很快就会导致不必要的副作用或数据损坏。想象一下许多信号触发和事件处理程序以未知顺序运行。您在应用程序不同部分的代码会更改看似随机或重复代码的数据。这是调试,维护或重构的噩梦。
因此,从UI代码中拆分与数据相关的任务是有意义的。为实现这一目标,许多应用程序都采用了基于MVC(模型 - 视图 - 控制器)或MVVM(模型 - 视图 - 视图模型)设计模式的体系结构。这些模式的实际实现可能有所不同,但它们都有一个主要原则:将显示数据(视图)的代码与读取或修改数据(模型)的代码分开。
QML中的模型 - 视图分离
您的QML应用程序的每个内容视图通常都是一个页面(Page)。的页面类型是一个视图控制器,它为用户提供和显示数据:
这DataModel是应用程序数据的中央存储。页面只能访问应用程序数据DataModel。它以对您的用例和视图有意义的方式管理您的数据。使用这种架构,模型和页面之间的数据流是双向的。这意味着,页面不仅可以显示模型数据,