liyongli 90aec58cf5 初始化 3 tahun lalu
..
commands 90aec58cf5 初始化 3 tahun lalu
config 90aec58cf5 初始化 3 tahun lalu
const 90aec58cf5 初始化 3 tahun lalu
geo 90aec58cf5 初始化 3 tahun lalu
helper 90aec58cf5 初始化 3 tahun lalu
realtime 90aec58cf5 初始化 3 tahun lalu
regexp 90aec58cf5 初始化 3 tahun lalu
serializer 90aec58cf5 初始化 3 tahun lalu
serverDate 90aec58cf5 初始化 3 tahun lalu
transaction 90aec58cf5 初始化 3 tahun lalu
typings 90aec58cf5 初始化 3 tahun lalu
utils 90aec58cf5 初始化 3 tahun lalu
README.md 90aec58cf5 初始化 3 tahun lalu
aggregate.ts 90aec58cf5 初始化 3 tahun lalu
collection.ts 90aec58cf5 初始化 3 tahun lalu
command.ts 90aec58cf5 初始化 3 tahun lalu
constant.ts 90aec58cf5 初始化 3 tahun lalu
document.ts 90aec58cf5 初始化 3 tahun lalu
index.ts 90aec58cf5 初始化 3 tahun lalu
operator-map.ts 90aec58cf5 初始化 3 tahun lalu
query.ts 90aec58cf5 初始化 3 tahun lalu
transaction.ts 90aec58cf5 初始化 3 tahun lalu
util.ts 90aec58cf5 初始化 3 tahun lalu
validate.ts 90aec58cf5 初始化 3 tahun lalu

README.md

数据库 SDK 设计说明

@author haroldhu

[TOC]

文件说明

- collection.ts   // 集合模块,继承 Query 模块
- constant.ts     // 常量模块
- db.ts           // 数据库模块
- document.ts     // 文档模块
- model.ts        // 类型约束模块
- query.ts        // 查询模块
- request.ts      // 请求模块 - 临时模拟使用
- util.ts         // 工具模块
- validate.ts     // 校验模块

常用命令

# 编辑 typescript
tnpm run tsc

# 实时编译 typescript
tnpm run tsc:w

# 运行测试用例
tnpm run tstest

类型声明

类型声明写在.ts文件里,这样可以及时发现问题。.d.ts不能及时暴露问题。

设计说明

集合模块继承 Query 模块,为了更好使用查询条件。

主要参考了 firebase - firestore 的设计。

字段设计

拉取文档列表后,过滤一遍数据,把特殊类型的字段格式化为相应的js对象。

发送请求新增或更新文档时,过滤一遍数据,把特殊字段编码为后端数据格式。

地理位置

每一个地理位置都是一个GeoPoint对象。

为什么不在类下面增加一个方法转换成后端数据格式?

这个开发者用不到,所以没有必要暴露出来。

日期时间

每一个日期时间都是一个Date对象。

整体设计

  • 使用document.get()获取数据时,把where()orderBy()limit()offser()、设置的数据拼接到请求里。
  • 对后台返回的数据进行格式化,使其成为一个DocumentSnapshot对象,对特殊类型的字段,如地理位置、日期时间进行处理。
  • 使用document.set()document.update()时,把数据进行编码,尤其是特殊字段的处理,编码成后端接口的数据格式。

扩展说明

开发者可以在每篇文档里记录创建时间和更新时间。

  • 创建时间是一个时间对象
  • 更新时间时一个时间对象的数组