Alasan untuk menunggu hingga ketiga kalinya dalam Aturan Tiga?

16

Saya baru saja menemukan artikel " Aturan Tiga " di wikipedia

Aturan tiga adalah aturan refactoring kode praktis untuk memutuskan kapan potongan kode direplikasi harus diganti dengan prosedur baru. Ini menyatakan bahwa kode dapat disalin sekali, tetapi ketika kode yang sama digunakan tiga kali, itu harus diekstraksi menjadi prosedur baru. Aturan ini diperkenalkan oleh Martin Fowler di Refactoring dan dikaitkan dengan Don Roberts.

Saya tahu bahwa ini hanya aturan praktis, tetapi mengapa disarankan untuk melakukan refactor hanya setelah duplikasi kedua? Apakah ada kerugian untuk refactoring ketika kita menulis duplikasi pertama?

Louis Rhys
sumber
2
Lihat Dua adalah angka yang tidak mungkin dan aturan Zero-One-Infinity untuk serangkaian perspektif lain.
AakashM
Ketika berbicara tentang pengembangan perangkat lunak, Wiki asli seringkali merupakan sumber yang jauh lebih baik daripada Wikipedia. Bagaimanapun, Ward Cunningham menemukan Wiki sebagai sarana untuk berbicara tentang pengembangan perangkat lunak. Lihat C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag
2
Jika ada 2 skenario untuk digunakan kembali, Anda dapat menabur logikanya dengan mudah (jika, yang lain). Setelah sampai ke tiga jalur yang mungkin, menjadi lebih mudah untuk faktor ulang daripada mereplikasi dan memelihara.
Andrew Lewis
Saya pikir itu alasan yang nyaman untuk copy-paste, ketika seseorang benar-benar dapat memperbaiki dan menggeneralisasi. Ketika Anda mendapatkan kasus ketiga, Anda dapat menggeneralisasi lebih banyak.
Alexey

Jawaban:

17

Saya pikir aturan praktis ini ada karena mudah terjebak dalam bermain "Bagaimana jika ..." ketika merancang kode untuk pertama kalinya atau setelah duplikasi pertama. Saya pernah mengalami kelumpuhan analisis yang parah dalam beberapa kasus karena orang mulai merancang fungsionalitas yang mungkin diperlukan nanti. Tetapi tidak diperlukan untuk masalah langsung yang ada.

Ada seni untuk mendesain / menulis hanya apa yang Anda butuhkan, sambil menjaga kode setuju untuk anjak ulang di masa depan.

EdH
sumber
8
Itu poin yang bagus. Dalam pengalaman saya, memiliki salinan ketiga juga membuat kesamaan dan perbedaan di antara mereka sedikit lebih tajam dibandingkan dengan hanya dua.
Daniel B