Tôi nghĩ rằng đây có thể là một câu trả lời meta gây tranh cãi và tôi đến bữa tiệc hơi muộn, nhưng tôi nghĩ việc đề cập đến vấn đề này ở đây là rất quan trọng, bởi vì tôi nghĩ tôi biết bạn đến từ đâu.
Vấn đề với cách sử dụng các mẫu thiết kế, là khi chúng được dạy, chúng trình bày một trường hợp như thế này:
Bạn có kịch bản cụ thể này. Tổ chức mã của bạn theo cách này. Đây là một ví dụ thông minh, nhưng hơi giả tạo.
Vấn đề là khi bạn bắt đầu làm kỹ thuật thực sự, mọi thứ không hoàn toàn như vậy. Mẫu thiết kế bạn đọc về sẽ không hoàn toàn phù hợp với vấn đề bạn đang cố gắng giải quyết. Chưa kể rằng các thư viện bạn đang sử dụng hoàn toàn vi phạm tất cả mọi thứ được nêu trong văn bản giải thích các mẫu đó, mỗi mẫu theo cách đặc biệt của riêng nó. Và kết quả là, mã bạn viết "cảm thấy sai" và bạn đặt câu hỏi như thế này.
Ngoài ra, tôi muốn trích dẫn Andrei Alexandrescu, khi nói về công nghệ phần mềm, người nói:
Kỹ thuật phần mềm, có thể hơn bất kỳ ngành kỹ thuật nào khác, thể hiện tính đa dạng phong phú: Bạn có thể làm điều tương tự theo nhiều cách chính xác và có nhiều sắc thái vô hạn giữa đúng và sai.
Có lẽ đây là một chút cường điệu, nhưng tôi nghĩ rằng điều này giải thích hoàn hảo một lý do bổ sung tại sao bạn có thể cảm thấy không tin tưởng vào mã của mình.
Chính trong những lúc như thế này, giọng nói tiên tri của Mike Acton, người dẫn dắt công cụ trò chơi tại Insomniac, hét lên trong đầu tôi:
BIẾT DỮ LIỆU CỦA BẠN
Anh ấy đang nói về đầu vào cho chương trình của bạn và đầu ra mong muốn. Và sau đó là viên ngọc Fred Brooks từ Tháng huyền thoại:
Chỉ cho tôi sơ đồ của bạn và che giấu các bảng của bạn, và tôi sẽ tiếp tục được bí ẩn. Cho tôi xem bảng của bạn và tôi thường sẽ không cần sơ đồ của bạn; chúng sẽ rõ ràng
Vì vậy, nếu tôi là bạn, tôi sẽ suy luận về vấn đề của mình dựa trên trường hợp đầu vào điển hình của mình và liệu nó có đạt được đầu ra chính xác mong muốn hay không. Và đặt câu hỏi như thế này:
- Là dữ liệu đầu ra từ chương trình của tôi chính xác?
- Được sản xuất hiệu quả / nhanh chóng cho trường hợp đầu vào phổ biến nhất của tôi?
- Mã của tôi có đủ dễ để lý do cục bộ về, cho cả tôi và đồng đội không? Nếu không, sau đó tôi có thể làm cho nó đơn giản hơn?
Khi bạn làm điều đó, câu hỏi "cần bao nhiêu lớp trừu tượng hoặc các mẫu thiết kế" trở nên dễ trả lời hơn nhiều. Bạn cần bao nhiêu lớp trừu tượng? Nhiều như cần thiết để đạt được những mục tiêu này, và không nhiều hơn nữa. "Những gì về mẫu thiết kế? Tôi chưa sử dụng bất kỳ!" Chà, nếu các mục tiêu trên đã đạt được mà không áp dụng trực tiếp một mô hình, thì tốt thôi. Làm cho nó hoạt động, và chuyển sang vấn đề tiếp theo. Bắt đầu từ dữ liệu của bạn, không phải từ mã.