主要观点:最近用 Rust 写一个小 Web 应用,决定不用 ORM,而是以类似数据访问层模式建模数据访问,介绍了一些有用的类型。
关键信息:
IdType
trait:标记用于数据库标识符的类型,通过新类型BookmarkId
包裹u64
,定义Bookmark
结构,利用IdType
trait 处理“现有”书签和未指定 ID 的书签,NoId
是一个通用占位符,表示尚未有 ID 的对象,NoId
类型告诉 serde 在反序列化时不期望id
字段。- 只读/读写事务模式:
Transaction
类型包装低级事务处理,提供对数据库的操作方法,创建只读和读写事务,Transaction
根据不同事务模式实现不同方法,事务可编码请求用户,确保数据访问的安全性。
重要细节: - 在
IdType
trait 中,通过id
方法返回内部 ID,NoId
的id
方法会导致编译时错误,因为它尚未有 ID。 - 读写事务和只读事务的实现,
Transaction
结构中添加user
字段以记录请求用户,在查询中添加用户 ID 限制,确保数据安全。 - 代码示例展示了如何使用这些类型和模式,如创建书签、列出书签等操作,但代码不能直接编译,旨在与 Rust 编译器进行对话,提供基础结构。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。