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

文章目录

    • 前言
    • [1. 规划目录结构](#1. 规划目录结构)
    • [2. 编写command模块](#2. 编写command模块)
    • [3. 注册command](#3. 注册command)
    • [4. 编写utils模块](#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"等等这样的模块都是可以创建的。每一个模块都与某一个特定的命令相互对应着。即使模块的数量非常之多,但是依然能够比较容易地找到所编写的代码。除此之外,还可以进行多层次的拆分操作,通过这样的方式,就具备了构建大型应用程序的能力。例如:

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

lib.rs中申明该模块

rust 复制代码
// lib.rs
pub mod commands;

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

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

3. 注册command

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

rust 复制代码
// 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。

ts 复制代码
invoke('hello', { name: 'John' })

4. 编写utils模块

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

rust 复制代码
// utils.rs
pub fn get_config() -> Config {
    // ...
}

lib.rs中申明该模块

rust 复制代码
// 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

相关推荐
Theodore_10222 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
----云烟----4 小时前
QT中QString类的各种使用
开发语言·qt
lsx2024064 小时前
SQL SELECT 语句:基础与进阶应用
开发语言
开心工作室_kaic5 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
向宇it5 小时前
【unity小技巧】unity 什么是反射?反射的作用?反射的使用场景?反射的缺点?常用的反射操作?反射常见示例
开发语言·游戏·unity·c#·游戏引擎
武子康5 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
qq_17448285755 小时前
springboot基于微信小程序的旧衣回收系统的设计与实现
spring boot·后端·微信小程序
转世成为计算机大神5 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
宅小海6 小时前
scala String
大数据·开发语言·scala
qq_327342736 小时前
Java实现离线身份证号码OCR识别
java·开发语言