Design Patterns Cơ bản
Design pattern dễ bị học ngược: nhớ sơ đồ UML trước rồi tìm chỗ áp vào. Cách có ích hơn là đi từ triệu chứng cụ thể trong code, rồi hỏi pattern nào giải quyết đúng triệu chứng đó.
Chọn bài theo triệu chứng
Phần tiêu đề “Chọn bài theo triệu chứng”| Triệu chứng | Pattern | Bài |
|---|---|---|
Hàm phình ra vì mỗi biến thể nghiệp vụ thêm một nhánh if; test một phép tính phải dựng cả workflow |
Strategy | Strategy pattern |
| Interface ứng dụng muốn dùng không khớp SDK hoặc nhà cung cấp; tên và trạng thái của họ len vào logic nghiệp vụ | Adapter | Adapter pattern |
| Cùng một hành vi cắt ngang (cache, retry, metrics) bị copy quanh nhiều lời gọi | Decorator | Decorator pattern |
| Một sự kiện nghiệp vụ kéo theo email, điểm thưởng, analytics và service cứ phải import thêm module | Observer / domain event | Observer và domain event |
Thứ tự đọc
Phần tiêu đề “Thứ tự đọc”- Strategy trước: tách phần biến thiên (selector, strategy, context), có ví dụ NestJS DI và bảng so sánh với State và Template Method.
- Adapter sau: đặt lớp dịch ở ranh giới tích hợp, nối với hexagonal ports and adapters và anti-corruption layer, kèm bảng phân loại lỗi. Đây là bài giữ ví dụ
PaymentPortđầy đủ.
Hai pattern hay dùng chung: mỗi gateway một adapter, một strategy chọn gateway theo merchant.
Đọc kèm
Phần tiêu đề “Đọc kèm”- Chọn ranh giới test: tách biến thiên sau contract giúp mỗi biến thể test độc lập.
- Bounded context: Adapter là cách hiện thực anti-corruption layer ở cấp kiến trúc.
- Modular monolith và microservices: cùng câu hỏi về ranh giới ở quy mô lớn hơn.