Software Design & Design Patterns — pattern không phải mục tiêu mà là kết quả của việc giải quyết một vấn đề thiết kế cụ thể. Đi từ fundamentals (coupling, cohesion, abstraction) → SOLID → refactoring & code smells → design patterns → kiến trúc (DDD, Clean/Hexagonal, CQRS).
2.0 — SOLID: lịch sử ra đời và vấn đề nó thực sự giải quyết
1. Vấn đề lịch sử — SOLID sinh ra từ nỗi đau nào? SOLID không rơi từ trên trời xuống. Nó là sản phẩm của một thời điểm lịch sử rất cụ thể — và hiểu bối cảnh đó quyết định việc bạn áp dụng nó đúng hay mù quáng. Thập niên 1990, thế giới C++/OOP doanh nghiệp. Các hệ thống lớn viết bằng C++ thời đó có đặc điểm: biên dịch một lần mất hàng giờ; sửa một header file kéo theo recompile cả dây chuyền phụ thuộc; deploy là chép binary khổng lồ; và cây kế thừa sâu là “best practice” được dạy chính thống. Robert C. Martin (Uncle Bob) quan sát các codebase như vậy và mô tả bốn triệu chứng của “thiết kế mục nát” (design rot): ...