Üçüncülük Kuralı'nda üçüncü defaya kadar beklemek gerek mi?


16

Ben sadece wikipedia'da " Üç Kural " makalesine rastladım

Üçüncüsü, çoğaltılan bir kod parçasının ne zaman yeni bir yordamla değiştirileceğine karar vermek için bir kod yeniden düzenleme kuralını belirtir. Kodun bir kez kopyalanabileceğini, ancak aynı kod üç kez kullanıldığında, yeni bir prosedüre çıkarılması gerektiğini belirtir. Kural, Yeniden Düzenleme'de Martin Fowler tarafından getirildi ve Don Roberts'a atfedildi.

Bunun sadece basit bir kural olduğunu biliyorum, ama neden sadece ikinci tekrardan sonra yeniden düzenleme yapılması önerilir? İlk kopyayı yazdığımızda yeniden düzenleme yapmanın bir dezavantajı var mı?


2
Bkz. İki, başka bir perspektif seti için imkansız bir sayı ve Sıfır Bir Sonsuzluk kuralıdır .
AakashM

Yazılım geliştirme hakkında konuşurken, orijinal Wiki genellikle Wikipedia'dan çok daha iyi bir kaynaktır. Ne de olsa Ward Cunningham , Wiki'yi yazılım geliştirme hakkında konuşmak için bir araç olarak icat etti . Bkz. C2.Com/cgi/wiki?RuleOfThree
Jörg W Mittag

2
Yeniden kullanım için 2 senaryo varsa, mantığı kolayca dallayabilirsiniz (eğer başka bir şeyse). Olası üç yola ulaşıldığında, tekrar faktörün tekrarlanması ve sürdürülmesinden daha kolay olur.
Andrew Lewis


Bence aslında yeniden düzenleme ve genelleme yapabilen kopyala-yapıştır için uygun bir bahane. Üçüncü vakayı aldığınızda daha fazla genelleme yapabilirsiniz.
Alexey

Yanıtlar:


17

Ben bu başparmak kuralı var çünkü kod ilk kez tasarlarken veya ilk çoğaltma sonra "Ya ..." oynamak içine yakalanmak kolaydır çünkü. Bazı durumlarda ciddi analiz felci ile karşılaştım çünkü insanlar daha sonra ihtiyaç duyulacak işlevsellik tasarlamaya başladı. Ancak eldeki acil sorun için gerekli değildir.

Kodun gelecekteki yeniden faktoring için uygun olmasını sağlarken, yalnızca ihtiyacınız olanı tasarlama / yazma sanatı vardır.


8
İyi bir noktaya değindin. Deneyimlerime göre, üçüncü bir kopyaya sahip olmak, aralarındaki ortaklıkları ve farklılıkları sadece ikisinden biraz daha keskin hale getiriyor.
Daniel B
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.