了解Tealina心智模型,可以更清楚的理解为什么要分多个包,以及每个包的作用。 Tealina 的目标是最大化 Typescript 的强类型优势,同时最小化手动编码,以下是实现这一目标的关键理念:
- 文件即路由
- 函数即API
- Model即类型
文件即路由
文件路径跟API路由是相似的,比如:/src/api/get/health.ts
=> get /api/health
, 采用这种一目了然的文件结构,无论什么时候回顾代码,都能快速定位到目标,再加个index文件,统一定义导出,实现批量导入。 批量导入带来,批量注册路由,提取类型信息。
函数即API
这个函数特指一个能拿到请求内容和响应请求的函数。 不同的服务端框架会有些许区别,可以通过类型别名,将函数类型统一为:
ts
Handler<Input, Output, Header, Context>
Handler<Input, Output, Header, Context>
它将作为入口函数,专注输入和输出的类型定义,文字注释以及负责业务实现的调用。 当我们把文件即路由
跟函数即API
结合,即一个文件导出一个函数,那么,这个函数本身就是富含文档信息的。 反过来,知道路由,也就知道这个文件在哪里,也就可以通过命令行的方式创建文件,同时自动更新对应 index 导入导出的定义。 更进一步的,从路由中提取信息,就可以匹配预设的CRUD模版。
Model即类型
一个 Model 类型,在不同的场景会有不同的变化,比如, 创建新记录时,不需要id字段。 修改时,id必填,其他字段可空。 这种简单的细微不同,可以采用自动生成的方式,减少手动编码。
无入侵的实现目标
采用文件即路由,函数即API方式,需要项目代码支持这种文件结构和路由注册,而且API函数的类型别名,不同的服务端框架也会略有不同,为简化这一步骤,Tealina 提供了 create-tealina
脚手架工具,让你可以快速的拥有一个开箱即用的全栈项目,如果你已经有一个传统的项目,只需迁移路由和API部分,业务层代码不需要大的变动。