【一起学Rust | 框架篇 | Tauri2.0框架】command拆分模块

news2024/9/21 22:57:55

在这里插入图片描述

文章目录

    • 前言
    • 1. 规划目录结构
    • 2. 编写command模块
    • 3. 注册command
    • 4. 编写utils模块


前言

上期曾提及,tauri 的 command 拆分模块乃是一种更为合理的方式。倘若将所有内容皆写入src-tauri/src/main.rs之中,将会致使代码难以进行维护,并且会显得极为臃肿,观感欠佳。

作为程序员,将代码编写得清晰整洁并具备高度可维护性,乃是一项基本的职业素养。清晰整洁的代码,不但能够使其他开发人员更易于理解并开展协作,亦有助于在项目的不同阶段进行高效的维护与扩展。就程序员自身来说,编写高质量代码具有至关重要的意义。其能够提升工作效率,减少错误及调试时间,同时亦可提高自身在行业中的专业形象与竞争力。

此前在官方文档中未查找到这部分内容,推测官方或许期望我们自行探索。然而,rust 语言确实存在一定难度,与其他编程语言不同,并非在学习基础部分后即可自如组织代码。在进行 rust 开发的过程中,可谓如临深渊、如履薄冰,每一步皆有可能出现问题,并且错误提示存在相互推诿的情况,若缺乏一定耐心,实难攻克。鉴于此,在此处,我分享一下我的模块拆分过程。

虽然说是 tauri 2.0 的模块拆分,但实际上在很大程度上,不只是 tauri 2.0,基本上所有的 rust 项目都可以采用这样的模块拆分方式。这里所强调的重点主要是关于模块的拆分。

1. 规划目录结构

首先,我们需要规划下目录结构,这里我参考了官方的目录结构,如下:

src
├── main.rs
├── app
│   ├── main.rs
│   ├── lib.rs
│   ├── commands
│   │   ├── greet.rs
│   │   └── ...
│   ├── utils
│   │   ├── utils.rs
│   │   └── ...
│   ├── ...
└── ...

其中,main.rs是入口文件,lib.rs是应用模块的入口文件,commands目录存放命令模块,utils目录存放工具模块,app目录存放应用模块。

2. 编写command模块

在被命名为“commands”的目录之下,能够创建数量庞大的 command 模块。举个例子来说,像“hello.rs”“add.rs”等等这样的模块都是可以创建的。每一个模块都与某一个特定的命令相互对应着。即使模块的数量非常之多,但是依然能够比较容易地找到所编写的代码。除此之外,还可以进行多层次的拆分操作,通过这样的方式,就具备了构建大型应用程序的能力。例如:

// hello.rs
#[tauri::command]
pub fn hello(name: String) -> String {
    format!("Hello, {}!", name)
}

lib.rs中申明该模块

// lib.rs
pub mod commands;

如此一来,我们便能够在main.rs文件当中使用“hello”这个命令了。

注意:模块中的command函数必须使用pub标记导出,然后在lib.rs中申明模块,才可以在main.rs中使用。而且每个模块中的command名称必须是唯一的,也就是说两个相同名称的command可以在不同的模块中存在,但是绝不能在同一个模块中存在。

3. 注册command

main.rs中,我们可以使用tauri::command宏来注册命令,例如:

// main.rs
fn main() {
    tauri::Builder::default()
        .invoke_handler(tauri::generate_handler![greet, hello])
        .run(tauri::generate_context!())
        .expect("error while running tauri application");
}

注意: 代码中的hello是从模块中导入进来的。

如此一来,我们成功地创建了一个名为“hello”的Command。在前端,我们可以通过调用以下代码来执行这个Command。

invoke('hello', { name: 'John' })

4. 编写utils模块

utils目录下,我们可以创建多个工具模块,例如utils.rsconfig.rs等,每个模块对应一个工具,例如:

// utils.rs
pub fn get_config() -> Config {
    // ...
}

lib.rs中申明该模块

// lib.rs
pub mod utils;

这样,我们就可以在main.rs中使用get_config工具了。


最后的目录结构如下:

src
├── main.rs
├── app
│   ├── main.rs
│   ├── lib.rs
│   ├── commands
│   │   ├── greet.rs
│   │   ├── hello.rs
│   │   └── ...
│   ├── utils
│   │   ├── utils.rs
│   │   └── ...
│   ├── ...
└── ...

如此一来,Tauri 的工作目录得以更加清晰明确。在此情况下,单独的模块仅需专注于处理自身模块对应的内容即可。至此,我们顺利完成了对 Tauri 的 command 模块的拆分工作。

本期文章与 tauri 开发技术的相关性相对较弱,主要是对 rust 模块进行了拆分,旨在提高代码的维护性与可读性。完成拆分后,能够使代码更易于理解其含义,并且可以更轻松地找到代码所在位置。基本上,对于所有的 rust 代码,均可采用此种方式进行模块拆分。

关于 tauri 开发,其核心部分目前还剩下内嵌文件、状态管理、调试、插件开发以及测试等重要方面。在接下来的阶段,我们将着重关注 tauri 插件的使用。对于这些内容,我们需要进行合理的规划,以确定一个科学的学习流程。当你阅读到这里的时候,实际上已经能够运用 tauri 来实现一些相当出色的应用了。可以毫不夸张地说,大部分的能力都已经被解锁完毕。

如果你也对tauri有兴趣,可以与我交流,或者关注我的专栏

http://t.csdnimg.cn/ML8j2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAN总线8路开关量DI输入8路带隔离集电极开路输出模块,数字量输入输出联动——DAM-C3022

#阿尔泰科技 简介: DAM-C3022为8路带隔离数字量输入,8路带隔离集电极开路输出,数字量输入与数字量输出实现联动,通道一一对应;CAN通讯接口,CAN2.0A标准帧格式,支持CAN-OPEN协议。 指标参数&am…

DOS介绍及最常用的20个dos操作命令

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

IObit Uninstaller Pro v13.6.0.5 绿色便携免安装版本 下载

功能非常强大好用的软件卸载清理工具 下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1I7lbixooii9ezSrp3X-y-w?pwd716l 提取码:716l

深度学习中的ONNX模型部署(打包为exe独立运行)详细教程

摘要:在本教程中,详细介绍了如何将ONNX模型部署为独立的可执行文件。从环境准备开始,介绍了ONNX Runtime及其GPU版本的安装,确定CUDA和cuDNN版本的兼容性。给出了使用ONNX Runtime加载和推理模型,处理输入和输出数据的…

中国电子学会Python3级等级考试202403客观题解析3

18、 在 Python 中 print(tuple(range(0,8,3)))语句,执行的结果是?( ) A (0,3,6) B (0,2,4,6) C (0,2,4,6) D (0,4) 答案:A range(0,8,3)生成的数据包括0,3,6;tuple()函数将其…

HarmonyOS开发实战( Beta5版)延迟加载lazy-import实践使用指导

随着应用功能持续增加,应用规模不断扩大,依赖的模块文件逐渐变多,应用冷启动加载模块的时间也越来越长。而在实际冷启动过程中执行了很多应用整体依赖但当前未使用的文件,此时可以通过延迟加载 lazy-import 的方法延缓对这些冗余文…

独立产品灵感周刊 DecoHack #066 – 下周苹果发布会要来了

本周刊记录有趣好玩的独立产品/设计/开发相关内容,每周一发布,往期内容同样精彩,感兴趣的伙伴可以到 官网查看更多内容。可以 邮件订阅或 RSS订阅本周刊。欢迎通过 Twitter 私信推荐或投稿。 💻 产品推荐 1. Apple Bento Slides…

基于C++实现(MFC界面)家谱管理系统

一、题目:家谱管理系统 二、内容: 2.1 概述 2.1.1 选题原因 做此题的原因是因为可以比较方便的记录家族历代成员的情况与关系,能很好的保存家族每一代的信息,而不用人工纸质的方式来存取家谱,更便于人们保存和使用…

青蓝智慧科技:京津冀氢能与绿色低碳创新应用场景发布

8月29日,北京成功举办了京津冀(唐山)氢能与绿色低碳创新应用场景的发布及供需对接活动。 在此活动中,唐山市科技局推出了涉及氢能与绿色低碳的创新应用方案,这些方案旨在抓住京津冀氢燃料电池汽车示范城市群、碳达峰试…

java后端开发-Mybatis连接数据库步骤

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

软通动力子公司鸿湖万联重磅发布SwanLinkOS 5,擘画开源鸿蒙AI PC新篇章

在刚刚落下帷幕的首届H•I AI 探索峰会上,软通动力再次于鸿蒙生态领域实现突破。此次活动中,软通动力高级副总裁、鸿湖万联总经理秦张波发布SwanLinkOS 5(天鸿操作系统),并联合软通计算(同方计算机&#xf…

Qt 样式表、选择器、盒子模型

1、两种样式表的写法 方式一(普通写法): this->setStyleSheet("QPushButton""{""background:yellow;""font:bold 14px;""color: red;""}""QPushButton:hover"&quo…

【Day07】

目录 MySQL-DQL- 基本查询 MySQL-DQL- 条件查询 MySQL-DQL- 聚合函数 MySQL-DQL- 分组查询 MySQL-DQL- 排序查询 MySQL-DQL- 分页查询 MySQL-DQL- 案例 MySQL-多表设计-一对多 MySQL-多表设计-一对多-外键约束 MySQL-多表设计-一对一&多对多 MySQL-多表设计-案例…

【MA35D1】buildroot 编译使用经验

文章目录 芯片介绍Buildroot开发Linux实践环境搭建代码获取编译执行步骤(仅适用于我公司产品) 后续有需要更改的输出文件目录 芯片介绍 NuMicro MA35D1系列为一颗异核同构的多核心微处理器,适用于高端 Edge IIoT Gateway。它是基于双核 64 位…

【OpenWrt(3)】内网搭建iperf3测速服务器

下载的iperf3 网站:https://iperf.fr/iperf-download.php Window地址:https://github.com/ar51an/iperf3-win-builds 安卓:https://gitee.com/hiyanyx/magic-i-perf 文章目录 下载的iperf3Windows 服务器启动安卓客户端启动参考 Windows 服务…

简单的EasyCaptcha图片验证码学习

简单的EasyCaptcha图片验证码学习 1. 需求 图片验证码是一种常见的验证形式,它通过生成一串随机数字或符号,并加入一些干扰像素,最终生成用于验证的图片。这种验证码的设计旨在增加破解难度,主要通过加大干扰强度来提高安全性。…

如何在 Vue 中创建一个带有表格和表单的弹窗

本文将通过一个具体的示例来介绍如何在 Vue 应用中实现一个带有表格和表单功能的弹窗组件。我们将使用 Element UI 库中的 el-dialog 组件来构建这个弹窗,并结合 el-table 和 el-form 来展示数据并允许用户进行编辑。 效果图: 完整代码最底部&#xff0…

火语言RPA流程组件介绍--文件系统监控

🚩【组件功能】:监控指定文件夹或文件的创建、变更删除等事件 配置预览 配置说明 事件类型 “异步回调处理”、“同步等待”2种类型供选择。流程是否等待发生监控文件的创建、变更、删除事件,异步不等待,同步则等待。 监控文件…

MySQL创建数据库和表应用教程

前言 MySQL 是一种流行的关系型数据库管理系统(RDBMS),广泛应用于 web 应用开发中。以下是一个简单的 MySQL 创建数据库和表的教程,涵盖了基本步骤。假设你已经安装了 MySQL 并且能够通过命令行或 MySQL Workbench 等工具访问它。…

【网络安全】服务基础第一阶段——第五节:Windows系统管理基础---- DHCP部署与安全

目录 一、DHCP协议 理解DHCP握手: 分配IP地址方式: DHCP协议报文的种类: DHCP协议工作过程: ​编辑DHCP四个阶段: 续约租期: 重新连接使用IP地址: DHCP安全性: 二、DHCP中继…