Rust 服務端項目分層結構

DDD

src/
├── main.rs              # 程序入口,負責啟動和依賴注入
├── lib.rs               # 公共庫入口,便于單元測試和復用
├── config.rs            # 配置管理(如數據庫、端口、環境變量等)
├── entities/            # 數據庫實體(ORM模型)
│   ├── mod.rs
│   └── user.rs
├── schema.rs            # 數據庫表結構(如 diesel/sea-orm 生成)
├── repository/          # 數據訪問層(Repository模式,封裝數據庫操作)
│   ├── mod.rs
│   └── user_repo.rs
├── service/             # 業務邏輯層(Service/Usecase)
│   ├── mod.rs
│   └── user_service.rs
├── api/                 # 接口層(HTTP/WebSocket/TCP等協議的 handler)
│   ├── mod.rs
│   └── user_handler.rs
├── error.rs             # 統一錯誤類型和處理
├── utils/               # 工具類/通用模塊
│   └── logger.rs
└── tests/               # 集成測試└── ...

當然可以!下面給你一個**典型且規范的 Rust 服務端項目分層結構**,適合中大型項目,易于維護和擴展。 ?
這種分層思想借鑒了 DDD(領域驅動設計)和主流 Web 框架(如 actix-web、axum)的最佳實踐。

---

目錄結構示例

src/
├── main.rs ? ? ? ? ? ? ?# 程序入口,負責啟動和依賴注入
├── lib.rs ? ? ? ? ? ? ? # 公共庫入口,便于單元測試和復用
├── config.rs ? ? ? ? ? ?# 配置管理(如數據庫、端口、環境變量等)
├── entities/ ? ? ? ? ? ?# 數據庫實體(ORM模型)
│ ? ├── mod.rs
│ ? └── user.rs
├── schema.rs ? ? ? ? ? ?# 數據庫表結構(如 diesel/sea-orm 生成)
├── repository/ ? ? ? ? ?# 數據訪問層(Repository模式,封裝數據庫操作)
│ ? ├── mod.rs
│ ? └── user_repo.rs
├── service/ ? ? ? ? ? ? # 業務邏輯層(Service/Usecase)
│ ? ├── mod.rs
│ ? └── user_service.rs
├── api/ ? ? ? ? ? ? ? ? # 接口層(HTTP/WebSocket/TCP等協議的 handler)
│ ? ├── mod.rs
│ ? └── user_handler.rs
├── error.rs ? ? ? ? ? ? # 統一錯誤類型和處理
├── utils/ ? ? ? ? ? ? ? # 工具類/通用模塊
│ ? └── logger.rs
└── tests/ ? ? ? ? ? ? ? # 集成測試└── ...

---

## 2. 各層職責說明

- **main.rs** ?
? 只負責程序啟動、配置加載、依賴注入、路由注冊,不寫業務邏輯。

- **config.rs** ?
? 負責讀取和管理配置(如數據庫連接、端口、環境變量等)。

- **entities/** ?
? 定義數據庫表結構和數據模型(Model),只做數據結構描述,不包含業務邏輯。

- **repository/** ?
? 封裝所有數據庫操作(CRUD),對上層隱藏具體 ORM 實現,便于后續切換數據庫或重構。

- **service/** ?
? 業務邏輯層,處理具體業務流程,調用 repository 層,聚合/編排數據。

- **api/** ?
? 對外接口層,處理 HTTP/WebSocket/TCP 請求,參數校驗、響應封裝,調用 service 層。

- **error.rs** ?
? 定義統一的錯誤類型,實現 From/Into,便于全局錯誤處理。

- **utils/** ?
? 放置日志、加解密、通用工具函數等。

- **tests/** ?
? 集成測試,模擬真實請求,保證各層協作無誤。

---

## 3. 代碼示例(簡化版)

### main.rs

```rust
fn main() {
? ? // 加載配置
? ? let config = config::load();
? ? // 初始化日志
? ? utils::logger::init();
? ? // 初始化數據庫連接池
? ? let db = repository::init_db(&config.db_url);
? ? // 啟動 HTTP 服務
? ? api::start_server(db, config.server_port);
}
```

### api/user_handler.rs

```rust
pub async fn get_user_handler(
? ? db: DbPool,
? ? user_id: i32,
) -> Result<Json<UserDto>, AppError> {
? ? let user = service::user_service::get_user_by_id(&db, user_id).await?;
? ? Ok(Json(user.into()))
}
```

### service/user_service.rs

```rust
pub async fn get_user_by_id(
? ? db: &DbPool,
? ? user_id: i32,
) -> Result<User, AppError> {
? ? repository::user_repo::find_by_id(db, user_id).await
}
```

### repository/user_repo.rs

```rust
pub async fn find_by_id(
? ? db: &DbPool,
? ? user_id: i32,
) -> Result<User, AppError> {
? ? // ORM 查詢
}
```

---

## 4. 規范建議

- 每層只做自己該做的事,**不跨層調用**。
- 業務邏輯盡量不寫在 handler(api)里,方便測試和復用。
- 錯誤類型統一,便于全局處理和日志記錄。
- 配置、日志、工具函數獨立,便于維護。
- 目錄和文件命名清晰,見名知意。

---

## 5. 參考項目

- [actix-web 官方示例](https://github.com/actix/examples)
- [axum 官方示例](https://github.com/tokio-rs/axum/tree/main/examples)
- [SeaORM 項目結構建議](https://www.sea-ql.org/SeaORM/docs/guides/project-structure/)

---

MVCS架構

src/
├── main.rs                # 程序入口
├── config.rs              # 配置管理
├── db.rs                  # 數據庫連接和初始化
├── error.rs               # 錯誤類型
├── models/                # Model:數據結構和數據庫實體
│   ├── mod.rs
│   └── user.rs
├── views/                 # View:響應渲染(DTO/模板等)
│   ├── mod.rs
│   └── user_view.rs
├── controllers/           # Controller:路由與流程控制
│   ├── mod.rs
│   └── user_controller.rs
├── services/              # Service:業務邏輯層
│   ├── mod.rs
│   └── user_service.rs
├── repository/            # Repository:數據訪問層(可選,復雜項目建議加)
│   ├── mod.rs
│   └── user_repo.rs
├── utils/                 # 工具類
│   └── logger.rs
└── tests/                 # 集成測試└── ...

2. 各層職責

  • Model(models/)

數據結構、數據庫實體(ORM?Model),只負責數據定義和轉換。

  • View(views/)

響應渲染(如 JSON/HTML/DTO),只做數據格式轉換。

  • Controller(controllers/)

路由注冊、參數校驗、調用?Service?層,組織業務流程,不直接操作數據庫。

  • Service(services/)

業務邏輯實現,聚合/編排數據,調用?Repository?層。

  • Repository(repository/)(可選)

封裝數據庫操作,便于后續切換數據庫或重構。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86080.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

山東大學《Web數據管理》期末復習寶典【萬字解析!】

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a;&#x1f3c0;山東大學期末速通專用_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1…

解決“在EFI系統上,Windows只能安裝到GPT磁盤“錯誤

環境&#xff1a;AMI BIOS&#xff08;2012 American Megatrends,Inc.&#xff09;&#xff0c;清華同方筆記本&#xff0c;windows10安裝U盤 背景&#xff1a;使用安裝U盤安裝系統時&#xff0c;在選擇磁盤下一步&#xff0c;出現了“無法在驅動器0的分區1上安裝windows(w)。…

NetworkTermination-原始固件-分區備份

在對設備進行固件分區備份之前&#xff0c;我們需要通過設備的 debug 接口進行連接。設備的 debug 接口位于左下角&#xff0c;連接時需設置波特率為 115200。 ssh連接 設備默認的 SSH 服務配置較為嚴格&#xff0c;端口號為 33998&#xff0c;且不允許通過密碼直接登錄。我們可…

Network Manager客戶端制作小結

關聯資料 Unity 入門到精通&#xff08;沈軍&#xff09; c語言中的局部變量和全局變量_c語言全局變量-CSDN博客 關鍵詞 本地玩家信息&#xff1a;LocalClientId 網絡狀態及網絡序列化 網絡游戲服務器和客戶端 ClientRpc與ServerRpc 變量作用域與作用周期 Network Manager —…

Python 開發環境全棧隔離架構:從 Anaconda 到 PyCharm 的四級防護體系

【深度探索】Windows 下 Python 多版本虛擬環境管理與隔離實戰&#xff1a;支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、PyCharm、VS Code 全工具鏈方案-CSDN博客 【零基礎】Python 多版本虛擬環境管理與隔離實戰——支持 Anaconda、Poetry、Pipenv、venv、uv、Hatch、Py…

Redis集群性能優化實戰指南

Redis集群性能優化實戰指南 一、技術背景與應用場景 隨著互聯網服務規模不斷擴大&#xff0c;緩存層承載了海量的讀寫請求。Redis因其高性能和豐富的數據結構被廣泛用于緩存、排行榜、會話存儲等場景。單節點Redis在并發、內存和持久化方面會遇到瓶頸&#xff0c;Redis集群&a…

使用 Telegraf 向 TDengine 寫入數據

Telegraf 是一款十分流行的指標采集開源軟件。在數據采集和平臺監控系統中&#xff0c;Telegraf 可以采集多種組件的運行信息&#xff0c;而不需要自己手寫腳本定時采集&#xff0c;降低數據獲取的難度。 只需要將 Telegraf 的輸出配置增加指向 taosAdapter 對應的 url 并修改…

華為云 Flexus+DeepSeek 征文|華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南

華為云 FlexusDeepSeek 征文&#xff5c;華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南 文章目錄 華為云 FlexusDeepSeek 征文&#xff5c;華為云Dify 平臺 CCE 高可用集群部署與大模型高質量知識庫構建指南前言1、ModelArts Studio大模型開通2、Dify平臺CC…

測試校招/應屆刷題知識路線

需要重點關注計算機基礎知識和測試相關技能 對于即將參加校招或應屆的同學,測試崗位需要重點關注計算機基礎知識和測試相關技能。 掌握操作系統、計算機網絡、數據庫等計算機基礎,同時熟悉測試基礎理論、測試方法、自動化測試工具 (如 Selenium、JMeter)和編程語言(如 Py…

華為云Flexus+DeepSeek征文 | 基于華為云的 Dify-LLM 企業級 AI 開發平臺部署指南

前言 在人工智能技術迅猛發展的今天&#xff0c;大語言模型&#xff08;LLM&#xff09;已成為推動企業智能化轉型的核心引擎。然而&#xff0c;如何高效、安全地將 LLM 能力整合到實際業務場景中&#xff0c;仍然是許多開發者面臨的挑戰。Dify 作為一款開源的 LLM 應用開發平…

Dify×奇墨科技:開源+本土化,破解企業AI落地難題

在人工智能技術迅猛發展的今天&#xff0c;企業亟需高效、安全的AI應用開發工具。開源LLMOps平臺Dify.AI憑借其靈活性與開放性&#xff0c;已成為開發者構建AI應用的首選之一。而它在中國市場的規模化落地&#xff0c;離不開本土合作伙伴的強力支撐——奇墨科技作為Dify中國大陸…

Vue3+Spring boot 前后端防抖增強方案

我將基于您提供的防抖切面代碼進行改進&#xff0c;主要優化點包括使用Redis實現分布式防抖、增強鍵生成策略、改進異常處理等。以下是完整的改進方案&#xff1a; 1. 改進的防抖注解 (Debounce.java) java 復制 下載 package com.weiyu.anno;import java.lang.annotation…

Cppcheck 使用教程:本地 + CMake + GitHub Actions 自動分析實戰

Cppcheck 是一款強大的 C/C 靜態分析工具&#xff0c;專注于發現內存泄漏、未初始化變量、死代碼、未使用函數等問題。它不依賴編譯器&#xff0c;適合在持續集成和本地開發中快速定位潛在 Bug。 本文將手把手教你如何&#xff1a; 安裝 Cppcheck 在命令行中使用 集成到 CMak…

Mac Parallels Desktop Kali 2025 代理設置

Mac Parallels Desktop Kali 2025 代理設置 核心步驟&#xff1a; kali設置橋接wifi 查看kali和主機ip 運行命令ifconfig查看kali ip&#xff1a; mac主機ip&#xff1a; kali設置proxy ip填寫主機ip&#xff0c;port為主機proxy端口 enjoy

通義靈碼編程智能體深度評測(Qwen3模型+終端操作+MCP工具調用實戰)

1 引言 隨著AI編程助手進入工具鏈集成時代&#xff0c;通義靈碼作為阿里云推出的智能編程解決方案&#xff0c;其Qwen3模型與MCP(Multi-tool Calling Platform)的協同能力引發開發者關注。本文將基于真實開發場景&#xff0c;從代碼理解、終端操作和工具鏈調用三個維度展開深度…

SpringBoot電腦商城項目--商品詳情+加入購物車

商品詳情 1. 持久層 1.1. 規劃sql語句 根據id查詢商品詳情 1.2 mapper層編寫抽象方法 /*** 根據商品id查詢商品詳情* param id 商品id* return 匹配的id商品詳情&#xff0c;如果沒有匹配的數據&#xff0c;則返回null*/Product findById(Integer id); 1.3 xml文件中編寫sq…

上交卡爾動力聯合提出FastDrive!結構化標簽實現自動駕駛端到端大模型更快更強

最近將類人的推理能力融入到端到端自動駕駛系統中已經成為了一個前沿的研究領域。其中&#xff0c;基于視覺語言模型的方法已經吸引了來自工業界和學術界的廣泛關注。 現有的VLM訓練范式嚴重依賴帶有自由格式的文本標注數據集&#xff0c;如圖1(a)所示。雖然這些描述能夠捕捉豐…

C# 委托(什么是委托)

什么是委托 可以認為委托是持有一個或多個方法的對象。當然&#xff0c;一般情況下你不會想要“執行”一個對 象&#xff0c;但委托與典型的對象不同。可以執行委托&#xff0c;這時委托會執行它所“持有"的方法。 本章將揭示創建和使用委托的語法和語義。在本章后面&am…

iTwin briefcase, checkpoint ,standalone

在 iTwin.js 中&#xff0c;briefcase 和 checkpoint 都是 IModel 的不同連接類型&#xff0c;但它們的用途和特性不同&#xff1a; Briefcase 用途&#xff1a;用于本地編輯和同步。通常是用戶從 iModelHub 檢出&#xff08;Check-out&#xff09;后在本地生成的可寫副本。特…

媒體AI關鍵技術研究

一、引言 隨著人工智能技術的迅猛發展&#xff0c;媒體行業正經歷前所未有的變革。AI技術不僅重塑了內容生產和傳播模式&#xff0c;更為媒體創意發展提供了全新可能。在數字化、移動化和信息爆炸的大背景下&#xff0c;傳統媒體面臨巨大挑戰&#xff0c;而AI技術為行業帶來了…