用JavaScript进行系统思考
每次我需要修复一个bug,我都遵循相同的工作流程:当QA团队中的某个人发现了一个bug,她/他就会给我发送一个bug报告,其中包含了重现问题的步骤。如果我看不懂STR,我通常会去找她/他,这样她/他就可以在她/他的电脑上给我看bug。
这种工作流在许多公司中似乎相当常见,我经常对自己说,在bug发生之前,它必须有更好的方法来获取应用程序的上下文。
动态绑定
但这更好的方法是什么呢?理想情况下,在错误发生之前创建应用程序的快照是很好的,这样我们就可以从该状态修复问题。
例如,假设有一个应用程序处于我们想要的状态,并且我们可以将该应用程序保存为一种格式,然后可以加载该格式来恢复该状态。将更快,更容易的确定解决方法。
事实上,新的数据流可能是这样的:
在本例中,我们有一个todo应用程序(基本的TodoMVC应用程序)在一个特定的上下文中(使用一个任务)。我们将应用程序的上下文导出到一个bundle中(一个字符串化的JSON对象),打开一个新的空白页面,然后安装这个bundle。然后我们看到我们的应用程序在新页面上运行,并且有正确的上下文。所以我们可以从这个上下文开始使用这个应用程序。
这意味着,作为一个开发人员,我只需加载一个JSON,QA团队中的某个人就会指派给我去获取应用程序的上下文并修复这个错误。简单得多,不是吗?
它是如何工作的?
在视频中,我们可以导出这个应用程序的状态并在运行时恢复它,因为:
* 应用程序被设计为一个系统,应用程序对象(组件、方法、模型)存储在一个很小的NoSQL数据库中。
你的应用程序是一个系统
当我们创建一个应用程序时,我们实际上创建了一个系统。系统由一个模型定义,由组件组成,并对带有行为的事件作出反应。正如你所看到的,这些概念在我们每天创建的应用程序中是相当常见的。
那么一个系统和一个应用程序有什么不同呢?对于系统,我们首先关注设计,然后才关注代码。怎么做呢?
* 首先设计你的系统模型
* 然后找到启动系统所需的所有组件
* 然后创建这些组件并实现其行为(使用方法)。
您需要在系统的设计和运行时之间进行完全的区分。设计必须始终是声明性的和执行命令性的。怎么做呢?使用UML定义您的模型并将其集成到您的开发工作流中。
Everything is a document
一切都是文档
It is possible because everything you have created can be managed as a document.
一旦系统准备好执行,我们需要将其存储在NoSQL数据库中。这是可能的,因为你所创建的所有内容都可以作为文档来管理。
假设我们想在数据库中存储一个对象,我们需要在JSON中序列化它,但是如果我们只存储它的状态,那么这个过程会更简单。
这就是在视频中所做的。模型和行为也被序列化,以便整个系统存储在数据库中。
那么运行时呢?如果我们在当前应用程序中更新一个对象怎么办?
因为所有对象状态都存储在数据库中,所以我们有一个完整的ODM(Object-Document Mapper对象-文档映射器)。这意味着对系统对象的更新将自动更新其在数据库中的状态。
因此,现在导出系统的当前状态就像对数据库进行转储。恢复系统的状态就像将转储导入数据库。很简单,不是吗?
想了解更多吗?
我将在下一篇文章中阐述我所谈到的概念和模式,但是如果您现在想创建一些系统可以:
* 安装System Runtime,这是一个创建和管理系统的JavaScript库。
* 阅读Donella H.Meadows的《Thinking in Systems系统之美》一书。一个系统世界的伟大介绍。
原文地址:https://dev.to/ecarriou/thinking-in-systems-with-javascript-3kd4
原作者:Erwan Carriou
翻译:小虎Oni