Saya mencari panduan tentang KERING vs Kopling kode. Saya tidak suka menduplikasi kode saya dan saya juga tidak suka kode kopling antara modul yang tidak terkait. Jadi saya refactor kode duplikat jika saya menemukan kode duplikat identik setahun setelah duplikasi diperkenalkan. Namun, saya semakin mengalami situasi di mana dunia nyata jauh lebih tidak dapat diprediksi, dan setelah refactoring kode, muncul situasi yang memerlukan forking kode lagi.
Misalnya, jika saya memiliki kode untuk menangani mobil bensin, SUV bensin, mobil listrik dan SUV listrik, katakanlah saya refactored kode duplikat ke dalam hierarki "bensin" dan hierarki "listrik", keduanya turun dari hierarki "kendaraan". Sejauh ini baik. Dan kemudian, perusahaan saya memperkenalkan mobil hybrid dan semi-hybrid yang akan membutuhkan perubahan inti pada hierarki asli saya sendiri. Mungkin itu akan membutuhkan "komposisi" antara bensin dan hierarki listrik.
Jelas duplikasi kode buruk karena meningkatkan waktu yang dibutuhkan untuk mengimplementasikan perubahan yang umum untuk semua produk di atas. Tetapi refactoring kode umum membuat sama sulitnya untuk memperkenalkan variasi spesifik produk, dan mengarah ke banyak "peningkatan kelas" ketika seseorang harus menemukan garis kode untuk memperbaiki bug - satu perubahan dalam kelas induk tingkat yang lebih tinggi dapat memicu bug regresi memicu di antara semua keturunan.
Bagaimana cara mencapai keseimbangan optimal antara KERING vs kopling kode yang tidak diinginkan?