云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

轻量服务器_263企业邮箱下载客户端_免费领

小七 141 0

网站建设_数据库大小写_免费6个月

更新:Caspár van Tergouw和我自己在2019年UI5con上发表了关于Mobx state tree的演讲。你可以在YouTube上找到它。

------------------

已经有几篇文章专门讨论UI5中的反应式编程。反应式编程的概念对任何程序员来说都是有趣的,因为如果应用正确,它们将产生更易于维护的代码,或者正如本文关于在UI5中使用MobX所说的:

MobX是一个流行的反应式状态管理库,来自React生态系统。它的学习曲线相对较低。MobX背后只有几个基本概念,JavaScript开发人员通常很容易掌握。MobX也很好地与UI5匹配,因为如果应用正确,它可以为UI5代码库添加上述好处,同时不会"碍事"。

但是,当应用"香草"MobX时,有可能会丢失代码中的概述。因为它是一个非常灵活的库,所以它很容易插入任何地方(例如控制器中)。当没有任何清晰逻辑的反应时,合肥大数据,人们很容易感到困惑。这将使理解和调试代码成为一项艰巨的工作,破坏了添加MobX的整个目的。

在本文中,我将不进一步介绍MobX以及如何在UI5中使用它,因为前面提到的文章已经很好地解释了这一点。相反,我将介绍MobX state tree,一个构建在MobX之上的库,它为MobX添加了结构。它还有一些其他可能很有趣的关键特性。在本文中,我将介绍这些特性及其优点。我还将为一个使用MobX状态树的项目提出一个结构,并总结我们在UI5应用程序中使用MobX状态树所获得的一些经验教训,该应用程序目前已在生产中,用户超过500人。

模型数据规范严格数据类型数据受到保护,只能通过操作进行更改定义派生数据简单的序列化和反序列化

使用模型指定数据

使用MobX状态树,您要做的关键是为数据创建"模型"。作为UI5开发人员,您已经熟悉模型的概念,因为您肯定会使用JSONModel或ODataModel。两个概念之间的主要区别在于,MobX state tree中的模型只是一个规范,而UI5模型包含数据。

使用MobX state tree,我可以创建一个非常简单的模型,如下:

当我想创建一个模型的实例时,我调用'create()'函数。

仅仅用模型定义数据就已经增加了结构到代码库。您将被迫考虑应用程序中的实体及其属性。

Strict datatypes

在上一个示例中,您可能注意到'name'属性被指定为字符串。这是MobX状态树所必需的。您总是需要精确地指定数据的类型。

让我们稍微扩展一下模型:

在这个示例中,我们添加了'daterelease'属性(JavaScript日期)、'amountsell'属性(整数)和'summary'属性(字符串)。"摘要"是可选的,因此可能未定义。所有其他属性都是必需的(但字符串可能仍然是空字符串)。

使用MobX状态树时,您可以确保某个属性始终符合定义的类型。因此,当一个属性是必需的时,它就在那里,当一个属性被定义为一个字符串时,它永远不会变成一个数字。

也许你可以想象拥有一个严格的数据类型的好处。不需要防御性地检查数据类型,也不会因为变量从数字变成字符串而产生混乱的bug。MobX状态树保证属性始终符合规范。

下面是一个实例化我们模型的例子。请注意,我不需要指定摘要,因为我们将其指定为可选属性。

注意:实际上,在MobX状态树的生产版本(我们在UI5中使用)中,您确实需要添加"类型检查"以确保数据输入完全符合规范–我将在文章的结尾对此进行解释。

数据受到保护并且只能通过动作来改变

MobX状态树之所以能保证对象符合规范,是因为模型内部的数据受到了保护

例如,这会产生一个错误:

改变对象的正确方法只有一种,那就是通过动作。因此我们需要用一个动作来扩展'Book'模型:

现在当我们在实例化模型后使用这个动作时,它将增加'amountsell':

这个保护的优点是您再次得到了一定的保证。从模型的定义中可以看出,"amountsell"属性在代码库中任何地方更改的唯一方法是使用"addSoldBook()"方法。没有其他方法可以更改此属性!

把它想象成一种受保护的包裹。没有办法改变包装内的任何东西,除了一些旋钮和按钮,已经在表面上的地方。不必担心任何人已经看了盒子里面的东西,在里面乱搞了。

是的,大数据收集,这使得双向绑定不可能,这是你在使用JSONModel时习惯的。所有更改都必须通过控制器。然而,这是关键,因为它使代码更易于维护。接下来,我们将展示控制器如何更改数据。

定义派生数据

定义模型时,您可以从中定义派生信息,称为MobX状态树中的"视图"(不要与UI5中的视图混淆)。把它们想象成你观察数据的镜头。通过使用MobX,只要数据发生更改,这些派生值就会自动更新。因此不需要自己编写触发器和观察者代码。

例如,我们可以创建一个新的只读属性来定义这本书是否畅销。当一本书的销量超过10倍时,我们称之为畅销书。

现在,"畅销书"属性将始终显示真假。