恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

ModelManager + Bmc:rust-web-app数据访问层的设计哲学与实战

  • 首页
  • 资讯中心
  • /
  • ModelManager + Bmc:rust-web-app数据访问层的设计哲学与实战

相关资讯

【嵌入式AI学习 Day1】RK3568开发板上手实录:串口连接、启动日志解读、SSH网络打通(新手避坑) 2026/8/26 15:07:11
文心大模型 LeetCode 5.最长回文子串 TypeScript实现 2026/8/26 15:07:11
微服务基座 2026/8/26 15:07:11

最新资讯

政务大厅信创改造怎么做?优胜国产化排队叫号系统适配方案详解!
5分钟掌握PDF批量文本替换|PDF补丁丁三种匹配模式实战笔记
PDF补丁丁批量文本替换指南:3步完成书签文本批量替换
离线OCR软件Umi-OCR:从截图到批量PDF的完整操作手册
AO3是什么?AO3全称、官方网站与网页版入口详解
PingFangSC 苹果平方字体前端集成:从下载到上线只需 3 步

今日推荐

Python random 模块常用函数详解:从入门到实战
Hermes接入团队协作后,我推翻了三个效率假设
免费AI大模型调教指南:打造专属网文写作助手

本周热门

Nextcloud 桌面客户端:把同步交给它,你只管改文件
如何将 HTML 转成 Word 文档且格式不丢失?html-to-docx 使用教程
Anki 批量操作卡片完整指南:一次搞定上千张,不再逐张修改

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

ModelManager + Bmc:rust-web-app数据访问层的设计哲学与实战

发布时间:2026/8/26 15:12:12
ModelManager + Bmc:rust-web-app数据访问层的设计哲学与实战 ModelManager Bmcrust-web-app数据访问层的设计哲学与实战【免费下载链接】rust-web-appCode template for a production Web Application using Axum: The AwesomeApp Blueprint for Professional Web Development.项目地址: https://gitcode.com/gh_mirrors/ru/rust-web-apprust-web-app 是一个面向生产的 Rust Web 应用脚手架基于 Axum它的核心亮点之一就是清晰的数据访问层设计ModelManager统一管理数据库连接池等数据资源BmcBackend Model Controller负责每个业务实体的 CRUD 操作二者通过Dbx组件实现按需开启的数据库事务。本文用通俗的语言带你读懂这套设计哲学并在实战中展示如何三步给项目新增一个数据实体。 一图看懂数据访问层的三层分工rust-web-app 把所有数据访问都收敛到lib-core的 model 模块中设计说明就在 model/mod.rs 文件头部的注释里分为三层层级角色一句话理解ModelManager资源管家握着数据库连接池随请求传入各处使用Bmc如UserBmc、ConvBmc实体管家每个业务表对应一个封装该表的增删改查Dbx事务开关决定每次查询走普通执行还是事务执行这种分层的最大好处业务代码永远不直接碰数据库驱动换库、做压测、写单元测试时只需要盯着这三层改。 ModelManager数据资源的单一入口在 model/mod.rs 中ModelManager结构非常简单核心就是一个Dbx字段内部是 sqlx 的 PostgreSQL 连接池连接池创建逻辑见 store/mod.rs。它的设计哲学有三点构造即就绪ModelManager::new()一次性建好连接池测试环境自动降为 1 连接规避 tokio 调度抖动源码注释写得非常坦诚。可共享实现Clone在 Axum 中作为 App State 注入所有路由参考 main.rs 中mm.clone()传入路由的用法。可变身调用new_with_txn()即可得到一个事务版副本——这是后文事务机制的关键。 Bmc一个实体一个控制器Bmc全称 Backend Model Controller比如UserBmc管理user表、ConvBmc管理conv表。每个 Bmc 做两件事声明元信息实现DbBmctrait指定表名等元数据定义见 base/mod.rs例如ConvBmc额外声明has_owner_id()返回true框架就会在创建时自动写入owner_id。委托通用 CRUD真正的 SQL 拼装全部委托给 base/crud_fns.rs 里的泛型函数create/get/list/update/deleteBmc 自己只写业务特化逻辑。以 user.rs 为例UserBmc只声明了const TABLE: static str user一行get方法的实现就只是转发到base::get干净利落。 Dbx按需开启的数据库事务亮点设计这套设计最精彩的部分在 store/dbx/mod.rs。默认情况下ModelManager是非事务的每条查询独立执行简单且快。当业务需要要么全成功、要么全回滚时比如创建用户要先插行再写密码流程是let mm mm.new_with_txn()?; // 变身事务版 mm.dbx().begin_txn().await?; // 开启事务 // ... 执行多条查询 ... mm.dbx().commit_txn().await?; // 提交完整实例可搜索mm.dbx().begin_txn()最佳示范就是 UserBmc::create先建用户行、再哈希写入密码两步共享同一个事务。Dbx内部还有两个值得称道的小设计引用计数TxnHolder带 counter嵌套调用begin_txn只计数不重开事务commit_txn计数归零才真正提交——避免嵌套事务踩坑。错误前置如果误用非事务副本开事务会立刻返回CannotBeginTxnWithTxnFalse等明确错误见 dbx/error.rs而不是静默执行。⚡ 声明式宏把样板代码一键清零手写 Bmc 样板太累项目提供了generate_common_bmc_fns!宏定义于 base/macro_utils.rs一个声明就能生成整套标准 CRUDgenerate_common_bmc_fns!( Bmc: ConvBmc, Entity: Conv, ForCreate: ConvForCreate, ForUpdate: ConvForUpdate, Filter: ConvFilter, );见 conv.rsConvBmc立刻拥有create、get、list、count、update、delete等全部方法然后还能追加自定义方法如add_msg。重要原则宏是可选的加分项——需要定制逻辑的实体完全可以手写甚至只挑部分方法用。️ 实战三步新增一个数据实体以给项目加一个实体为例套路已经完全标准化建表在 sql/dev_initial/01-create-schema.sql 中建表统一带上cid/ctime/mid/mtime四个时间戳审计列框架会自动维护它们。定义类型 Bmc在crates/libs/lib-core/src/model/下新建实体文件声明实体结构、ForCreate/ForUpdate/Filter三种 DTO然后实现DbBmc并调用generate_common_bmc_fns!。暴露 RPC 接口在 web-server 的 rpcs 目录 中用配套的generate_common_rpc_fns!宏生成 JSON-RPC 端点路由自动挂载到/api。想快速看完整链路直接跑 quick_dev.rs 示例它演示了ModelManager初始化、登录、实体 CRUD 的全流程。 总结这套设计哲学教会我们的事单一入口所有数据访问必须穿过 Model 层资源连接池、未来的 S3/Redis 客户端集中在ModelManager。按需事务默认非事务保性能new_with_txn() 引用计数事务让开启事务成为一行显式决策而非全局默认。约定大于配置通用 CRUD 下沉到泛型函数声明式宏消灭样板但始终保留手写逃生舱。面向测试连接池在测试态自动收敛、#[cfg(test)]精细控制单元测试就是活文档user.rs 底部测试 覆盖了创建、查询与清理。如果你正在用 Rust Axum 搭建生产级 Web 应用这套ModelManager Bmc Dbx的分层值得作为你数据访问层设计的蓝本参考。【免费下载链接】rust-web-appCode template for a production Web Application using Axum: The AwesomeApp Blueprint for Professional Web Development.项目地址: https://gitcode.com/gh_mirrors/ru/rust-web-app创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号