5.3 — Production Case Studies: đọc pattern trong code thật đang chạy
Chương này là bài tập tổng hợp của toàn bộ tài liệu: soi các hệ thống lớn — mỗi hệ vài đoạn, theo cùng khung ba câu hỏi: họ chọn pattern gì, vì sao (đánh đổi cái gì), và nếu chọn khác thì hệ quả ra sao. Nhiều case đã được nhắc rải rác ở các chương trước — ở đây gom lại thành chân dung trọn vẹn. A. Go Standard Library — bậc thầy của interface nhỏ io.Reader / io.Writer Chọn gì: interface 1 method (ISP 2.4 cực hạn), hợp đồng ngữ nghĩa viết kỹ từng trường hợp biên (LSP 2.3), composition chồng vô hạn (Decorator 4.5: bufio bọc gzip bọc net.Conn). Vì sao: số implementation là vô hạn và không biết trước — hợp đồng phải tối thiểu để dễ thỏa mãn nhất có thể; đổi lại caller chịu khó (loop đọc cẩn thận) và stdlib bù bằng helper (io.ReadAll, io.Copy — kèm tối ưu sniff optional interface WriterTo/ReaderFrom, kỹ thuật 2.4 bước 3). Nếu chọn khác: interface “tiện caller” kiểu ReadAll() []byte → mất streaming (buộc load hết vào RAM), mất composition — cả hệ sinh thái streaming của Go không tồn tại. Một quyết định 1 method, hệ quả 15 năm. ...