Rust in Everything
基于 sea-orm 2.0.4

设计取舍

前七部分按代码讲机制,每一章都顺带碰到一些「这样做换来了什么、付出了什么」。这一部分只有一页,把它们收到一起:每一条先说收益,再说代价,代价都配着本卷某一页上跑出来的现象,链接指向那一页,这里不重讲机制。只有一条(宏生成代码的编译时间)在前面没有证据,这一页补了一个实验。

  1. 设计取舍:十二条取舍。运行期构造 SQL,编译期只对着实体检查;语句树和方言分开,方言专有的语法在别的后端上被静默丢掉或 panic;后端是运行时的 enum,mock 会改变它的形状;关系是 RelationDef 值,join 和 Loader 各有各的代价;ActiveValue 三态让 update 只写改过的列,也让「忘了 Set」不报错;每条语句单独借连接,没有会话;ConnectOptions 是一层薄翻译;解码在几处把错误变成 None;DbErr 按调用位置包装;dense 实体的宏输出翻倍、编译时间约六倍;sea-orm-sync 是 sed 的产物。
flowchart TB
  q[查询主线] --> t1["运行期构造 SQL"]
  q --> t2["语句树与方言"]
  q --> t9["宽松解码"]
  w[写入主线] --> t6["ActiveValue 三态"]
  d[定义主线] --> t4["关系是值"]
  d --> t11["宏生成代码"]
  t3["后端是运行时 enum"] --> q
  t3 --> w
  t7["每条语句借一次连接"] --> q
  t7 --> w
  srcdir["一份 src"] --> t12["sed 生成同步版"]

💬 关联讨论

发起讨论
加载中...