当前位置: 首页 > web >正文

rust的main.rs和lib.rs该怎么写

🧠 一句话理解:

  • main.rs 是程序的“入口” —— 负责“接线”,不写业务逻辑;
  • lib.rs 是程序的“内核” —— 组织你的领域层、应用层等逻辑模块,供 main.rs(或测试)调用。

🗂️ 文件职责对比表

文件作用内容建议是否包含逻辑
main.rs应用程序入口(Presentation)解析命令行、调用 lib 中逻辑❌不包含业务逻辑
lib.rs统一导出模块,组织架构pub mod xxx;,DDD层统一暴露接口✅组织逻辑模块

main.rs 应该写什么?

src/main.rs 中,建议这样写(适合 CLI 工具):

fn main() {// 初始化日志、解析 CLI 参数let args = xshell::presentation::cli::parse_args();// 加载配置(来自配置文件、env)let config = xshell::infrastructure::config::load_config();// 执行业务逻辑(调用 orchestrator)if let Err(e) = xshell::application::orchestrator::run(args, config) {eprintln!("Error: {:?}", e);std::process::exit(1);}
}

👆 main.rs 的职责是组织调度调用 lib.rs 中暴露的能力,不要包含任何业务逻辑。


lib.rs 应该写什么?

src/lib.rs 中:

pub mod presentation;
pub mod application;
pub mod domain;
pub mod infrastructure;

如果你想为测试暴露一套 API,可以这样写:

pub use application::orchestrator::run;

甚至可以在这里做一层封装暴露简化 API:

pub fn execute(args: Args) -> Result<()> {let config = infrastructure::config::load_config();application::orchestrator::run(args, config)
}

📦 如果是用于测试的结构(TDD驱动)

你可以直接在 lib.rs 中写:

#[cfg(test)]
mod tests {use super::*;#[test]fn it_runs_successfully() {let args = /* mock args */;let config = /* mock config */;assert!(application::orchestrator::run(args, config).is_ok());}
}

这样你的业务核心逻辑就完全与 CLI、主函数解耦了。


🧱 推荐的执行流结构(DDD+CLI)

main.rs ─→ cli.rs│↓orchestrator.rs│↓domain/* + infrastructure/*

✅ 总结一句话:

  • main.rs:只管组织程序流程、入口、参数解析,不做“事”。
  • lib.rs:暴露架构核心模块,便于测试和复用,是你“可被调用”的 DDD 内核。

http://www.xdnf.cn/news/14184.html

相关文章:

  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 【Qt】QStateMachine状态机-对状态机分组、历史状态,实现复杂状态机
  • 玩转Docker | 使用Docker部署Blinko个人笔记工具
  • 如何在FastAPI中构建一个既安全又灵活的多层级权限系统?
  • 刚学到一个使用共享软件而禁用弹窗的工具:微软电脑管家
  • 如何给Hexo-butterfly主题博客在复制时添加版权声明
  • 【图片转 3D 模型】北大·字节跳动·CMU携手——单图15 秒生成结构化3D模型!
  • 创客匠人视角:从外卖大战看创始人IP的差异化定位逻辑
  • veyon(电子教室管理) v4.9.6.1 官方版
  • n8n 从 Docker 到 Node.js 本地环境迁移指南
  • Linux Docker的环境配置与简单使用
  • 《高并发系统性能优化三板斧:缓存 + 异步 + 限流》
  • Spring Boot 自动配置原理深度解析与自定义 Starter 实战
  • 【Unity】MiniGame编辑器小游戏(一)俄罗斯方块【Tetris】
  • [学习] 牛顿迭代法:从数学原理到实战
  • Nginx、CDN、 DNS的关系解析
  • ​​信息系统项目管理师-信息系统工程 知识点总结与例题分析​​
  • 单项链表的操作及其实现
  • 重定向与缓冲区:C语言IO的奥秘(模拟封装glibc)
  • 工业PID算法在温控器的应用与参数说明
  • 《单调队列》题集
  • list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘
  • Windows10电脑开始菜单快速查找应用程序
  • I/O模式之epoll,本文会讲到epoll的相关接口以及底层,还会涉及水平和边缘工作模式,以及通过epoll相关接口实现一个水平工作模式服务端
  • 【DRL】强化学习中的概念和术语
  • 用数学融智学人力资源模型的核心架构:建立可量化的理论框架
  • openMP的简单介绍以及c++执行实例
  • JS递归了解
  • k3s入门教程(三)部署控制面板
  • 第六章 进阶19 琦琦的追求