Ada file sumber dalam proyek yang agak besar dengan beberapa fungsi yang sangat sensitif terhadap kinerja (disebut jutaan kali per detik). Bahkan, pengelola sebelumnya memutuskan untuk menulis 12 salinan fungsi yang masing-masing sangat sedikit berbeda, untuk menghemat waktu yang akan dihabiskan memeriksa persyaratan dalam satu fungsi.
Sayangnya, ini berarti kode tersebut adalah PITA untuk dipelihara. Saya ingin menghapus semua kode duplikat dan menulis hanya satu templat. Namun, bahasanya, Java, tidak mendukung templat, dan saya tidak yakin obat generik cocok untuk ini.
Rencana saya saat ini adalah menulis file yang menghasilkan 12 salinan fungsi (sebuah expander template sekali pakai saja, secara praktis). Saya tentu saja akan memberikan penjelasan berlebihan mengapa file harus dibuat secara programatis.
Kekhawatiran saya adalah bahwa ini akan menyebabkan kebingungan pengelola di masa depan, dan mungkin memperkenalkan bug yang tidak menyenangkan jika mereka lupa membuat ulang file setelah memodifikasinya, atau (bahkan lebih buruk) jika mereka memodifikasi file yang dihasilkan secara program. Sayangnya, singkat menulis ulang semuanya dalam C ++, saya tidak melihat cara untuk memperbaikinya.
Apakah manfaat dari pendekatan ini lebih besar daripada kerugiannya? Haruskah saya sebaliknya:
- Ambil pukulan kinerja dan gunakan fungsi tunggal yang dapat dipelihara.
- Tambahkan penjelasan mengapa fungsi tersebut harus digandakan 12 kali, dan anggun ambil beban pemeliharaan.
- Coba gunakan obat generik sebagai templat (mungkin tidak berfungsi seperti itu).
- Berteriaklah pada pengelola lama untuk membuat kode sehingga kinerja bergantung pada satu fungsi.
- Metode lain untuk mempertahankan kinerja dan rawatan?
PS Karena desain proyek yang buruk, membuat profil fungsi agak rumit ... namun, mantan pengelola telah meyakinkan saya bahwa kinerja yang dicapai tidak dapat diterima. Saya berasumsi dengan ini yang ia maksudkan lebih dari 5%, meskipun itu adalah tebakan lengkap dari saya.
Mungkin saya harus menguraikan sedikit. 12 salinan melakukan tugas yang sangat mirip, tetapi memiliki perbedaan kecil. Perbedaannya ada di berbagai tempat di seluruh fungsi, jadi sayangnya ada banyak, banyak, pernyataan bersyarat. Ada secara efektif 6 "mode" operasi, dan 2 "paradigma" operasi (kata-kata dibuat sendiri). Untuk menggunakan fungsi, seseorang menentukan "mode" dan "paradigma" operasi. Ini tidak pernah dinamis; setiap potongan kode menggunakan tepat satu mode dan paradigma. Semua 12 pasangan mode-paradigma digunakan di suatu tempat dalam aplikasi. Fungsi-fungsi tersebut dengan tepat dinamakan func1 to func12, dengan bilangan genap yang merepresentasikan paradigma kedua dan angka ganjil mewakili paradigma pertama.
Saya sadar bahwa ini adalah desain terburuk yang pernah ada jika perawatan adalah tujuannya. Tapi sepertinya "cukup cepat", dan kode ini tidak memerlukan perubahan untuk sementara waktu ... Juga perlu dicatat bahwa fungsi aslinya belum dihapus (meskipun kode mati sejauh yang saya tahu) , jadi refactoring akan menjadi sederhana.
Makefile
" (atau sistem apa pun yang Anda gunakan) dan hapus kompilasi setelah selesai selesai . Dengan cara ini mereka tidak memiliki kesempatan untuk memodifikasi file sumber yang salah.