Kiến trúc phần mềm tối giản: Tại sao bớt code lại là đỉnh cao của kỹ thuật

Chúng ta thường bị cám dỗ bởi những mẫu thiết kế cầu kỳ và thư viện thời thượng. Nhưng theo thời gian, những hệ thống sống sót bền bỉ nhất lại là những hệ thống biết dũng cảm loại bỏ những dòng code thừa thãi.

Có một nghịch lý phổ biến trong sự nghiệp của hầu hết kỹ sư phần mềm: Năm đầu tiên, chúng ta cố gắng viết code cho chạy được. Năm thứ ba, chúng ta cố gắng chứng minh năng lực bằng cách áp dụng tất cả các Design Pattern mình vừa đọc trong sách vào một tính năng đơn giản. Và năm thứ mười, điều duy nhất chúng ta khao khát là: “Làm sao để giải quyết bài toán này với số dòng code ít nhất có thể?”.

1. Bẫy tư duy Over-Engineering

Over-engineering không đến từ sự thiếu hiểu biết, mà ngược lại, nó thường sinh ra từ những lập trình viên có năng lực nhưng quá nóng vội trong việc phán đoán tương lai. Chúng ta tạo ra 5 tầng trừu tượng (abstraction layer), áp dụng CQRS và Event Sourcing chỉ để quản lý một bảng người dùng chưa tới 1.000 bản ghi.

“Simplicity is prerequisite for reliability — Sự đơn giản là điều kiện tiên quyết cho sự tin cậy.”

Edsger W. Dijkstra

2. Ví dụ thực tế: Code tinh gọn vs Cầu kỳ

Hãy xem xét ví dụ xử lý cache đơn giản trong PHP. Bạn không nhất thiết phải viết một Factory đa cấp chỉ để lưu trữ một chuỗi JSON:

// Phương pháp tối giản, rõ ràng và hiệu quả
function get_cached_dashboard_stats( int $user_id ): array {
    $cache_key = "dashboard_stats_{$user_id}";
    $cached = wp_cache_get( $cache_key );
    
    if ( false !== $cached ) {
        return $cached;
    }
    
    $stats = calculate_expensive_user_metrics( $user_id );
    wp_cache_set( $cache_key, $stats, '', 3600 );
    
    return $stats;
}

3. 3 Nguyên tắc giữ cho hệ thống luôn thanh thoát

  • YAGNI (You Aren’t Gonna Need It): Đừng viết code cho một nhu cầu tưởng tượng sau 6 tháng nữa. Khi nhu cầu thực sự đến, bối cảnh kinh doanh thường đã thay đổi hoàn toàn.
  • Bền bỉ quan trọng hơn hào nhoáng: Một hàm thuần túy (pure function) được viết rõ ràng sẽ tồn tại 10 năm mà không cần bảo trì.
  • Xóa code là một chiến thắng: Số dòng code bạn xóa đi thường có giá trị tương đương hoặc lớn hơn số dòng code bạn viết thêm.

Kiến trúc tối giản không phải là lười biếng hay viết ẩu. Đó là kết quả của sự chiêm nghiệm sâu sắc sau hàng ngàn giờ gỡ lỗi những hệ thống quá phức tạp.

CodeChoVui

CodeChoVui

Kỹ sư phần mềm, người đam mê hệ thống tối giản, web development và mã nguồn mở. Chia sẻ góc nhìn công nghệ và trải nghiệm lập trình thực chiến.

Theo dõi bản tin CodeChoVui

Nhận thông báo qua email mỗi khi có bài viết mới về lập trình, trải nghiệm phần mềm và công nghệ.

Thảo luận

2 bình luận

  • Nguyễn Hoàng Long
    Nguyễn Hoàng Long

    Rất đồng tình với quan điểm của tác giả! Đã từng làm một dự án microservice cho một app nội bộ 50 người dùng, debug cực khổ kinh khủng. Đơn giản hóa kiến trúc luôn là quyết định sáng suốt nhất.

    • CodeChoVui
      CodeChoVui Tác giả

      Cảm ơn bạn Long! Đúng là microservice rất tốt cho tổ chức hàng trăm kỹ sư, nhưng với đa số bài toán thường ngày, một monolith được module hóa sạch sẽ vẫn đem lại hiệu quả cao nhất.

Gửi ý kiến thảo luận