การเขียน Module และการจัดการ Project Structure

Sharing is caring!

การจัดการโครงสร้างโปรเจกต์และการเขียนโมดูล (Module) ที่ดีคือหัวใจสำคัญของการเขียนโปรแกรมที่สามารถดูแลรักษาได้ในระยะยาว โดยเฉพาะในภาษา Rust ที่มีระบบ module ที่ยืดหยุ่น บทความนี้จะอธิบายทุกสิ่งที่คุณต้องรู้เกี่ยวกับการแยกโค้ด การใช้ mod และ pub และโครงสร้างแฟ้มโฟลเดอร์ที่เหมาะสม

เริ่มต้น: โครงสร้างโปรเจกต์พื้นฐาน

เมื่อคุณสร้างโปรเจกต์ Rust ใหม่ด้วยคำสั่ง:

cargo new my_project

คุณจะได้โครงสร้างโฟลเดอร์ดังนี้:

my_project/
├── Cargo.toml
└── src/
    └── main.rs

การสร้าง Module แรก

สมมติว่าเราต้องการแยกฟังก์ชัน greet ไปไว้ในโมดูลแยก เราสามารถทำได้โดย:

// src/greeting.rs
pub fn greet(name: &str) {
    println!("Hello, {}!", name);
}

แล้วใน main.rs:

mod greeting;

fn main() {
    greeting::greet("Rust");
}

โครงสร้างที่ซับซ้อนขึ้นด้วย Submodule

เมื่อโปรเจกต์ใหญ่ขึ้น ควรแยกไฟล์เป็นโฟลเดอร์ย่อย และใช้ mod.rs:

src/
├── main.rs
├── content/
│   ├── mod.rs
│   └── article.rs
├── network/
│   ├── mod.rs
│   └── client.rs
└── mod.rs

ตัวอย่างการประกาศใน src/mod.rs:

pub mod content;
pub mod network;

การใช้ pub และการเข้าถึง Struct

หากคุณต้องการให้ Struct ถูกใช้จากไฟล์อื่น ต้องใช้ pub:

// src/network/client.rs
pub struct SmtpServer;

impl SmtpServer {
    pub fn new() -> SmtpServer {
        SmtpServer
    }
}

และใน main.rs:

mod network;

use network::client::SmtpServer;

fn main() {
    let server = SmtpServer::new();
}

Best Practices สำหรับการจัดการ Project

  • หลีกเลี่ยงการยัดทุกอย่างไว้ใน main.rs
  • ใช้โฟลเดอร์ + mod.rs สำหรับการจัดระเบียบ module
  • ตั้งชื่อ module ให้สื่อความหมาย เช่น auth.rs, database.rs
  • ประกาศสิ่งที่จำเป็นด้วย pub เท่านั้น
  • หลีกเลี่ยงการใช้ pub use เกินความจำเป็น

สรุป

การจัดการ Module และ Project Structure ใน Rust ถือเป็นพื้นฐานที่สำคัญสำหรับการพัฒนาแอปพลิเคชันให้เติบโตได้อย่างมีระเบียบ โค้ดที่อ่านง่าย เข้าใจง่าย คือโค้ดที่สามารถพัฒนาและดูแลต่อได้ในอนาคต

บทความโดย poolsawat.com – Rust, Dev Tips และโครงสร้างโปรเจกต์แบบมืออาชีพ

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *