Saya memiliki beberapa kode yang hampir identik, tetapi menggunakan jenis yang sama sekali berbeda, tanpa pewarisan di antara mereka, pada variabel utama. Secara khusus, saya menulis analisa dengan Roslyn untuk C # dan VB.NET, dengan tipe berikut:
Microsoft.CodeAnalysis.CSharp.Syntax.AttributeSyntax Microsoft.CodeAnalysis.VisualBasic.Syntax.AttributeSyntax
Saya bertanya-tanya apakah, karena kode melakukan hal yang sama, saya harus menjaganya tetap KERING mungkin, memisahkan sesedikit mungkin menjadi metode yang terpisah (tetapi identik selain jenisnya), atau benar-benar memisahkannya karena kedua metode tersebut adalah tidak terkait dan perubahan di masa depan dapat memaksa satu versi untuk berubah, tetapi tidak yang lain (meskipun ini tidak mungkin)?
Sunting: Setahun kemudian, saya mengenai masalah yang sama ini, dan tim Roslyn membantu saya menyelesaikannya: Tulis kelas dasar yang menggunakan generik dan memiliki TAttributeSyntax
parameter yang melakukan sebagian besar pekerjaan. Kemudian, tulis kelas turunan dengan data minimal yang membutuhkan jenis tertentu.
Jawaban:
Anda tidak melakukan KERING karena seseorang menulisnya di buku di suatu tempat yang baik untuk dilakukan, Anda melakukannya KERING karena sebenarnya memiliki manfaat nyata.
Khususnya dari pertanyaan itu:
Jadi, pada dasarnya, jangan berpikir "oh man, kode ini sangat mirip, mungkin saya harus refactor untuk tidak mengulangi sendiri". Pikirkan "apakah refactoring untuk membuat basis kode ini menggunakan kembali elemen umum membuat kode lebih dapat dipertahankan atau kurang terpelihara ?" Lalu, pilih salah satu yang membuatnya lebih bisa dirawat.
Yang sedang berkata, mengingat SRP dan hanya mencoba untuk memiliki kelas kecil, fleksibel umumnya, mungkin masuk akal untuk menganalisis kode Anda karena alasan itu , memecah bit perilaku yang menggunakan tipe generik (Anda mengatakan bahwa mereka identik selain tipe) menjadi kelas kecil. Kemudian Anda akan mengetahui bahwa beberapa kelas ini benar- benar identik (tidak hanya sebagian besar identik), dan kemudian Anda dapat membangun toolkit jika Anda ingin menambahkan
Microsoft.CodeAnalysis.CPlusPlus.Syntax.AttributeSyntax
.sumber