Gần đây tôi đã tìm thấy một câu trả lời hay cho câu hỏi của tôi trong cuốn "Mã sạch" của chú Bob, mà tôi muốn chia sẻ. Ông phân biệt ba loại trùng lặp
Các đoạn mã giống hệt nhau nên được thay thế bằng một phương thức duy nhất. Vì vậy, sửa chữa sẽ là trích xuất phương thức và ủy thác cho hành vi phổ biến.
- trong cùng một phương thức, thực hiện Trích xuất biến cục bộ và sử dụng lại nó.
- trong cùng một lớp thực hiện tái cấu trúc Phương thức trích xuất.
- trong các lớp của cùng một phương thức trích xuất phân cấp và kéo nó lên. Một hệ thống phân cấp có thể được tạo để tìm một vị trí cho các phương thức.
- trong các lớp của hệ thống phân cấp riêng biệt sử dụng ủy quyền cho các đối tượng mới.
- Nếu các phương thức không cần bất kỳ trạng thái kèm theo nào, thì mẫu "lib" có thể được áp dụng (đó là một thùng chứa cho các phương thức tĩnh, thường được gọi là
SthUtil
hoặc SthLib
).
trường hợp switch/case
và if/else
luôn luôn kiểm tra cho cùng một tập hợp các điều kiện .
- Chúng nên được thay thế bằng đa hình.
Các mô-đun thực hiện các thuật toán tương tự . Đây là những thứ khó tìm nhất, vì không có máy dò nhân bản nào có thể tìm thấy chúng.
- Khi phạm vi là patters thiết kế lớn hơn được sử dụng. Mẫu thiết kế Phương thức mẫu có thể được áp dụng cho các thuật toán bên trong hệ thống phân cấp lớp.
- Mẫu thiết kế chiến lược có thể được áp dụng cho bất kỳ thuật toán nào được sử dụng ở những nơi khác nhau.
Cũng là một điểm hợp lệ được đề cập bởi Oded, khi giao dịch với các phiên bản khác nhau của thư viện
- hợp nhất trên một phiên bản duy nhất. Mẫu thiết kế mặt tiền có thể giúp ở đây.
Cuối cùng, một câu tốt nhất để trả lời câu hỏi của tôi là bởi sự kích thích:
phương pháp tái sử dụng mã được sử dụng trong các ngôn ngữ OO là các đối tượng.