Có một tệp nguồn trong một dự án khá lớn với một số chức năng cực kỳ nhạy cảm với hiệu năng (được gọi là hàng triệu lần mỗi giây). Trong thực tế, người bảo trì trước đó đã quyết định viết 12 bản sao của một chức năng, mỗi bản khác nhau rất ít, để tiết kiệm thời gian dành cho việc kiểm tra các điều kiện trong một chức năng.
Thật không may, điều này có nghĩa là mã là một PITA để duy trì. Tôi muốn xóa tất cả các mã trùng lặp và chỉ viết một mẫu. Tuy nhiên, ngôn ngữ, Java, không hỗ trợ các mẫu và tôi không chắc rằng thuốc generic có phù hợp với điều này không.
Kế hoạch hiện tại của tôi là viết thay vì một tệp tạo ra 12 bản sao của hàm (một thiết bị mở rộng mẫu chỉ sử dụng một lần, thực tế). Tất nhiên tôi sẽ cung cấp giải thích đa dạng cho lý do tại sao tệp phải được tạo theo chương trình.
Mối quan tâm của tôi là điều này sẽ dẫn đến sự nhầm lẫn của các nhà bảo trì trong tương lai và có thể đưa ra các lỗi khó chịu nếu họ quên tạo lại tệp sau khi sửa đổi hoặc (thậm chí tệ hơn) nếu họ sửa đổi thay vì tệp được tạo theo chương trình. Thật không may, viết lại toàn bộ điều trong C ++, tôi thấy không có cách nào để khắc phục điều này.
Do lợi ích của phương pháp này lớn hơn những nhược điểm? Tôi nên thay thế:
- Thực hiện cú đánh hiệu suất và sử dụng một chức năng duy nhất, có thể duy trì.
- Thêm giải thích cho lý do tại sao chức năng phải được nhân đôi 12 lần và ân cần bảo trì.
- Cố gắng sử dụng thuốc generic làm mẫu (có thể chúng không hoạt động theo cách đó).
- Hét vào bộ duy trì cũ để tạo mã sao cho hiệu năng phụ thuộc vào một chức năng duy nhất.
- Phương pháp khác để duy trì hiệu suất và bảo trì?
PS Do thiết kế kém của dự án, cấu hình chức năng khá khó khăn ... tuy nhiên, người bảo trì trước đây đã thuyết phục tôi rằng hiệu năng đạt được là không thể chấp nhận được. Tôi cho rằng bằng cách này, anh ta có nghĩa là hơn 5%, mặc dù đó là một phỏng đoán hoàn toàn về phía tôi.
Có lẽ tôi nên giải thích một chút. 12 bản sao thực hiện một nhiệm vụ rất giống nhau, nhưng có sự khác biệt nhỏ. Sự khác biệt là ở những nơi khác nhau trong toàn bộ chức năng, vì vậy thật không may, có rất nhiều, rất nhiều, các tuyên bố có điều kiện. Có hiệu quả 6 "chế độ" hoạt động và 2 "mô hình" hoạt động (từ được tạo ra bởi chính tôi). Để sử dụng chức năng, người ta chỉ định "chế độ" và "mô hình" hoạt động. Điều này không bao giờ năng động; mỗi đoạn mã sử dụng chính xác một chế độ và mô hình. Tất cả 12 cặp mô hình chế độ được sử dụng ở đâu đó trong ứng dụng. Các hàm được đặt tên khéo léo là func1 đến func12, với các số chẵn đại diện cho mô hình thứ hai và các số lẻ đại diện cho mô hình thứ nhất.
Tôi biết rằng đây chỉ là về thiết kế tồi tệ nhất nếu tính bảo trì là mục tiêu. Nhưng nó dường như "đủ nhanh" và mã này không cần bất kỳ thay đổi nào trong một thời gian ... Điều đáng chú ý là chức năng ban đầu chưa bị xóa (mặc dù đó là mã chết theo như tôi có thể nói) , vì vậy tái cấu trúc sẽ đơn giản.
Makefile
" (hoặc bất kỳ hệ thống nào bạn sử dụng) và xóa nó ngay sau khi biên dịch xong . Theo cách này, đơn giản là họ không có cơ hội sửa đổi tệp nguồn sai.