typegraphql-prismaGraphQLPrismaCodegen

看了 `typegraphql-prisma` 之后被深深地震撼了

所以说 codegen 才是正道吗?看了 typegraphql 的文档之后,感觉我之前自制的 GraphQL/sequelize decorator 系统就是一坨翔。

我设想的方案是写一些 TS def,设计一套 decorator,然后基于这套 decorator 生成 sequelize schema 和 GraphQL schema。这种内存中生成 schema 的缺陷在于有 bug 不好调试,因为你不知道生成出来的是什么东西。此外就是 runtime 生成会带来一些奇怪的循环依赖问题,我花了很多时间和精力处理这些东西,若可以绕过则是极好的。

Codegen 没有这些问题。它的根本优势在于预编译自由得多,可以做各种处理(不像运行时编译只能基于有限的且不可靠的 type metadata 做),而且生成的内容是固定的、可见的,甚至可以(也应该)check in 到 repo 里。这对于大型项目开发无疑是重要的。

而且几年不写前端,现在的方案(指 typegraphql-prisma)已经可以进化到这么好用、这么细粒度了。可以自定义 expose 哪些 field 就不说了,甚至可以细化到某个 method 的权限管理,真是颇有点当年 rails 框架 conventional over configuration 的风范了,只不过这一次更牛,是 type safe 的。

说到这里更不得不佩服 TypeScript 的远见卓识。有 TypeScript 无敌类型系统的加持,这样的方案才得以运行,其他语言则只能望洋兴叹了。

Colliot6/21/2023, 1:53:37 AM


Preview:

Cancel

Elsewhere

Colliot replied to 阿里巴巴数学竞赛选错赛道了

弱反射原理 mathbb{P}{M_t ge a} = 2mathbb{P}{B_t ge a},其中 M_t = sup_{sin[0,t]}B_s 是布朗运动 B_t 在 [0,t] 内达到的最大值。 它可以写作mathbb{P}{B_t ge a}=dfrac{1}{2}mathbb{P}{M_t ge a},这个在直观上很容易理解,因为 B_t ge a 必然有 M_t ge a,而 M_t 第一次到达 a 之后,后续任何点大于或小于 a 的概率都是 1/2。 强反射原理 给定标准布朗运动 B_t,假设 s 是个停时,那么

begin{equation} B'_t= begin{cases} B_t & text{if } t le s 2B_s-B_t & text{if } t > s end{cases} end{equation}

仍是标准布朗运动。 这实际上就是「第一次到达 a 之后,后续任何点大于或小于 a 的概率都是 1/2」的严格表述。所以后者可以推出前者。

hugify replied to 阿里巴巴数学竞赛选错赛道了

感觉跟 Brownian motion 或者说 Wiener process 的 reflection principle 有关?

hugify replied to 用类型系统描述实数的精髓是什么?

找到了相关文章 Formalising Real Numbers in Homotopy Type Theory,让我来看一看。

hugify replied to 用类型系统描述实数的精髓是什么?

怎么用类型系统表述戴德金分割呢?

ice1000 replied to 用类型系统描述实数的精髓是什么?

我现在懂了,就是戴德金分割

ice1000 replied to 为什么不能对 C++ 的语法进行简化?

不成立。现在的语法也有这样的歧义

ice1000 replied to 净土还活着吗zsbd

虎哥居然还在回复,神奇

Colliot replied to 净土还活着吗zsbd

还活着!!