Monorepository mit Rust: Code-Organisation in der Praxis

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Monorepository mit Rust: Code-Organisation in der Praxis

\n\n

Bei der Entwicklung großer Projekte in Rust stellt sich früher oder später die Frage: Wie organisiert man den Code, damit er wartbar, wiederverwendbar und leicht skalierbar bleibt? Ein beliebter Ansatz ist das Monorepository. In diesem Artikel werden wir untersuchen, was ein Monorepository im Kontext von Rust ist, wie man es mit Cargo Workspaces einrichtet und welche praktischen Techniken helfen, Chaos in der Codebasis zu vermeiden.

\n\n

Das Material wird sowohl für Anfänger nützlich sein, die gerade erst mit großen Projekten beginnen, als auch für erfahrene Entwickler, die nach effektiven Möglichkeiten zur Code-Organisation suchen.

\n\n

Was ist ein Monorepository und warum wird es in Rust benötigt?

\n\n

Ein Monorepository (Monorepo) ist ein Ansatz, bei dem der gesamte Code eines Projekts (oder mehrerer verwandter Projekte) in einem einzigen Repository gespeichert wird. Im Gegensatz zu Multi-Repositories, bei denen jeder Dienst oder jede Bibliothek in einem eigenen Git-Repository lebt.

\n\n

Warum entscheiden sich Rust-Entwickler oft für ein Monorepository?

\n
    \n
  • Einheitliche Abhängigkeitsversionen. Sie vermeiden Konflikte, wenn verschiedene Crates unterschiedliche Versionen derselben Bibliothek benötigen.
  • \n
  • Vereinfachtes Refactoring. Eine API-Änderung in einem Crate ist sofort in allen abhängigen Crates sichtbar – der Rust-Compiler zeigt alle Stellen an, die korrigiert werden müssen.
  • \n
  • Gemeinsame Kompilierung. Cargo kann den Build optimieren, indem es bereits kompilierte Artefakte wiederverwendet.
  • \n
  • Einheitliche Änderungshistorie. Sie müssen keine Commits zwischen verschiedenen Repositories synchronisieren.
  • \n
\n\n

Das wichtigste Werkzeug zur Organisation eines Monorepositorys in Rust sind Cargo Workspaces. Schauen wir uns an, wie man sie in der Praxis einsetzt.

\n\n

Einrichtung von Cargo Workspaces: Schritt-für-Schritt-Beispiel

\n\n

Angenommen, wir erstellen eine Anwendung, die aus drei Teilen besteht:

\n
    \n
  • Bibliothek core_lib – gemeinsame Logik;
  • \n
  • Bibliothek utils – Hilfsprogramme;
  • \n
  • ausführbare Datei app – die Haupt-Binärdatei.
  • \n
\n\n

Erstellen wir die Struktur des Monorepositorys:

\n\n
my_monorepo/\n├── Cargo.toml          # Root-Manifest des Workspace\n├── core_lib/\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs\n├── utils/\n│   ├── Cargo.toml\n│   └── src/\n│       └── lib.rs\n└── app/\n    ├── Cargo.toml\n    └── src/\n        └── main.rs\n
\n\n

Schritt 1. Root-Cargo.toml

\n\n
[workspace]\nmembers = [\n    "core_lib",\n    "utils",\n    "app",\n]\n
\n\n

Jetzt sind alle drei Crates Teil eines einzigen Workspace. Cargo wird sie als eine Einheit verwalten.

\n\n

Schritt 2. Interne Abhängigkeiten

\n

In der Datei app/Cargo.toml geben wir an, dass sie von unseren Bibliotheken abhängt:

\n\n
[package]\nname = "app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\ncore_lib = { path = "../core_lib" }\nutils = { path = "../utils" }\n
\n\n

Schritt 3. Code schreiben

\n

Beispielcode in core_lib/src/lib.rs:

\n\n
pub fn greet(name: &str) -> String {\n    format!("Hello, {}!", name)\n}\n
\n\n

In app/src/main.rs verwenden wir diese Funktion:

\n\n
use core_lib::greet;\n\nfn main() {\n    println!("{}", greet("Rust Developer"));\n}\n
\n\n

Schritt 4. Build und Ausführung

\n

Die Befehle cargo build, cargo test und cargo run funktionieren für den gesamten Workspace. Sie können auch einen bestimmten Crate ausführen:

\n\n
cargo run -p app\ncargo test -p core_lib\n
\n\n

Dies ist die grundlegende Einrichtung. Kommen wir nun zu fortgeschritteneren Praktiken.

\n\n

Fortgeschrittene Organisation: Module, Tests und Versionierung

\n\n

Wenn die Anzahl der Crates zunimmt, ist es wichtig, Disziplin zu wahren. Hier sind einige bewährte

Blogs

Buchempfehlungen