© 2026 Laravel

Design Patterns & Architecture

4 phút đọc 30 lượt xem

#1. Design Pattern là gì?

Design Pattern (mẫu thiết kế) là các giải pháp đã được kiểm chứng cho các vấn đề thường gặp trong lập trình phần mềm. Chúng không phải là mã nguồn cụ thể, mà là các “chiến lược tổ chức code” giúp hệ thống trở nên dễ mở rộng, bảo trì và kiểm thử.

Tư duy cốt lõi: Pattern là công cụ, không phải mục tiêu. Người kiến trúc sư giỏi là người dùng đúng pattern, đúng lúc.

#2. Phân loại Design Pattern

Chúng ta chia Design Pattern thành 3 nhóm chính dựa trên mục đích sử dụng (GoF - Gang of Four):

#🏗️ Creational Patterns (Khởi tạo)

Tập trung vào cách tạo đối tượng một cách linh hoạt, giấu đi logic khởi tạo phức tạp.

  • Abstract Factory: Tạo ra các họ đối tượng liên quan mà không cần chỉ định class cụ thể.
  • Builder: Lắp ráp đối tượng phức tạp qua từng bước.
  • Dependency Injection: Tiêm phụ thuộc giúp tách biệt code và dễ kiểm thử.
  • Factory: Giấu logic khởi tạo đối tượng.
  • Factory Method: Ủy quyền việc tạo đối tượng cho các lớp con.
  • Prototype: Nhân bản đối tượng bằng cơ chế clone.
  • Service Locator: Trung tâm điều phối và lấy dịch vụ khi cần.
  • Singleton: Đảm bảo một Class chỉ có duy nhất một thực thể.

#🧱 Structural Patterns (Cấu trúc)

Tổ chức mối quan hệ giữa các class/object để tạo ra cấu trúc hệ thống linh hoạt.

  • Adapter: Bộ chuyển đổi Interface không tương thích.
  • Active Record: Linh hồn của Eloquent (Dữ liệu & Hành vi trong 1 class).
  • Bridge: Tách biệt cấu trúc trừu tượng và triển khai.
  • Composite: Xử lý cấu trúc cây (Menu, Filesystem).
  • Data Mapper: Tách biệt hoàn toàn tầng dữ liệu và nghiệp vụ.
  • Decorator: Thêm hành vi mới mà không dùng kế thừa.
  • DTO: Chuẩn hóa luồng dữ liệu giữa các tầng.
  • Facade: Giao diện đơn giản hóa cho hệ thống phức tạp.
  • Flyweight: Tối ưu bộ nhớ bằng cách chia sẻ dữ liệu chung.
  • Proxy: Người đại diện kiểm soát truy cập đối tượng.
  • Repository: Lớp đệm truy xuất dữ liệu.
  • Value Object: Đóng gói dữ liệu nhỏ với tính bất biến.

#🔄 Behavioral Patterns (Hành vi)

Quản lý giao tiếp và luồng xử lý giữa các đối tượng.

  • Chain of Responsibility: Truyền yêu cầu qua chuỗi xử lý (Middleware).
  • Command: Đóng gói yêu cầu thành đối tượng (Artisan, Job Queue).
  • Iterator: Duyệt tập hợp dữ liệu chuyên nghiệp (Collection).
  • Mediator: Trạm trung chuyển thông tin (Event Dispatcher).
  • Memento: Cỗ máy thời gian (Undo/Redo).
  • Null Object: Loại bỏ logic kiểm tra null rườm rà.
  • Observer: Theo dõi thay đổi (Events & Listeners).
  • State: Quản lý trạng thái đối tượng.
  • Strategy: Thay đổi thuật toán runtime.
  • Template Method: Khung xương quy trình (Base classes).
  • Unit of Work: Quản lý giao dịch tập trung (Database Transactions).
  • Visitor: Tách biệt thuật toán khỏi cấu trúc dữ liệu.

Lưu ý: Đừng quá lạm dụng Design Pattern. Hãy ưu tiên sự đơn giản, rõ ràng và khả năng bảo trì (maintainability) trước khi nghĩ đến việc áp dụng các mẫu phức tạp.