共计 1791 个字符,预计需要花费 5 分钟才能阅读完成。
- 项目地址:https://github.com/tangshuang…
- 使用文档:https://www.tangshuang.net/71…
- 使用案例:https://github.com/tangshuang…
TySheMo 是一个前端数据(状态)管理工具。它面向复杂的前端数据管理,用于在前端结构化数据的不断变化中,清晰地控制数据变动,使数据变动不引起错误,并且方便表单数据的恢复、校验、格式化提交。
在需要对数据类型进行校验,数据变动引发界面变动,数据校验,格式化后输出数据,保证数据运算时得到想要的结果等一系列复杂的数据变化需求,TySheMo 可以在项目中发挥不错的的作用。虽然它不追求性能,但是在确保数据类型和格式安全上,它具有非常优秀的思想,让对数据有强烈依赖的业务可以在复杂的逻辑中保证不出错。
类型检查系统
虽然我们已经有 typescript 这样的类型检查系统,但是,typescript 是在编译时进行类型检查的,在运行时,我们需要对一些动态的数据(特别是从后台 api 返回的数据)进行类型和格式检查。在支持 graphql 的系统中似乎不必这么担心,但目前大多数的 restful 应用,还是需要有一个工具去做这样的一件事。
TySheMo 将数据类型的检查抽象出三个层面的对象:原型、类型、规则。它们分别在原子、结构、逻辑层面对数据进行校验,而且是在运行时。如果校验失败,你还可以通过抛出的错误得到更为详细的信息。
TySheMo 内部提供了多个数据原型(类似基础数据类型)扩展,并且直接使用 js 标准库中的内置对象作为原型,免去需要用字符串来定义类型的麻烦。内置了 Dict, List, Enum, Tuple, Range 这几种类型。通过对后台 api 数据的检查,就可以即时避免由于 api 返回数据类型或结构引起的错误。同时,它还提供了更为丰富的类型检查规范,你可以阅读它的文档了解更多用法。
数据模式
TySheMo 提供了一种定义结构化数据的方式,用于对一个结构化数据进行规范化定义。数据模式是一个抽象的数据结构范型,它不是具体的数据,但规定了数据本身的结构规范。并且,作为工具库,TySheMo 提供了 Schema 类,schema 实例拥有根据定义规范数据的能力。
更为重要的是 Schema 是一种数据结构和行为逻辑约束的范例。行业里有 json schema 这样的先驱,我们在这些先行者的基础上,提炼出对业务有帮助的部分,形成一套类似后台数据库结构描述一样的定义语言,用以在前端去描述一个结构化,但随时变化的数据对象。
它基于数据类型检查系统,你需要在 type 属性传入对应的类型。对于 Schema 实例而言,它是无状态的,它所提供的接口是纯粹的工厂,不会产生任何内部资源。这样的设计,使得 Schema 有可能成为规范,在开发中 / 测试中,确保业务中给的数据是按照规范给定的,否则,就会抛出错误。
数据模型
TySheMo 提供了基于 Schema 的数据模型 Model,是一个管理状态数据的容器。数据被放在数据模型中管理时,由于 Schema 的约束,数据不得不按照规范运行。它提供了当代数据响应的特性,你可以观察数据变化,从而来决定如何变动界面。
作为工具库,TySheMo 从业务出发对数据模型的写作方式进行了约束。一个数据模型,是一个 class,并且需要定义它的 schema。要将数据放到模型中进行管理,你必须实例化模型,并且使用模型接口进行数据修改和格式化。但到最后,你会发现,模型的使用异常简单,真正复杂的部分,往往在于,如何通过 Schema 制定你的数据规范。
这只是对 Model 的数据响应最简单的一个演示,你还可以通过 Model 提供的能力,完成更多的事情。你可以把它和 react, vue, angular 结合使用,你可以在任何应用中使用它。特别是在表单数据管理上,TySheMo 可以做到非常出色。关于 Model 的细节和更多特性,你可以阅读使用文档了解。
结语
TySheMo 不解决所有问题,而是专注将一个应用中的某个局部的数据管理做到极致。你从来没有体验过,同一个表单的业务逻辑,你不需要修改业务逻辑代码部分,而只需要修改 UI 交互的逻辑,就可以完全适应 react, vue, angular。你也许不需要它,但也许也需要它,这取决于你如何在你但应用中管理你的数据。如果你对这个项目感兴趣,可以通过 github 参与项目。
(完)