Yenileme konusunda burada bahsetmediğim bir şeye inanmaya başladım, burada çok fazla cevap olduğunu biliyorum, ama bunun yeni olduğunu düşünüyorum.
Ben acımasız bir refactor ve DRY daha önce şartların ortaya çıkmasından bu yana güçlü bir inanan oldum. Çoğunlukla kafamda büyük bir kod temeli kullanmakta zorlandığımdan ve kısmen DRY kodlamadan hoşlandığım ve C&P kodlama hakkında hiçbir şeyden zevk almadığım için, aslında benim için acı verici ve çok yavaş.
Mesele şu ki, DRY konusunda ısrarcı olmak, nadiren başkalarının kullandığını gördüğüm bazı tekniklerde bana pek çok uygulama yapmıştı. Pek çok insan Java'nın DRY yapmak için zor veya imkansız olduğu konusunda ısrar ediyor, ancak gerçekten denemiyorlar.
Uzun zaman önce örnek olarak biraz benzer bir örnek. İnsanlar Java GUI oluşturma zor olduğunu düşünüyorum. Tabii ki böyle kodlarsanız:
Menu m=new Menu("File");
MenuItem save=new MenuItem("Save")
save.addAction(saveAction); // I forget the syntax, but you get the idea
m.add(save);
MenuItem load=new MenuItem("Load")
load.addAction(loadAction)
Bunun delice olduğunu düşünen herkes kesinlikle haklı, fakat Java'nın hatası değil - kod böyle yazılmamalıdır. Bu yöntem çağrıları, diğer sistemlere sarılması amaçlanan işlevlerdir. Böyle bir sistemi bulamazsanız, kurun!
Açıkça böyle bir kod yapamazsınız, bu yüzden geri adım atıp soruna bakmanız gerekir, bu tekrarlanan kodun gerçekte ne işi var? Bazı ipleri ve onların ilişkilerini (bir ağaç) belirtiyor ve o ağacın yapraklarını eylemlere katıyor. Öyleyse gerçekten istediğin söylemek:
class Menu {
@MenuItem("File|Load")
public void fileLoad(){...}
@MenuItem("File|Save")
public void fileSave(){...}
@MenuItem("Edit|Copy")
public void editCopy(){...}...
İlişkinizi özlü ve açıklayıcı bir şekilde tanımladıktan sonra, onunla başa çıkmak için bir yöntem yazıyorsunuz - bu durumda geçilen sınıfın yöntemlerini yineliyorsunuz ve bir ağaç kuruyorsunuz, sonra bunu Menülerinizi oluşturmak için kullanıyorsunuz. ve Eylemler (tabii ki) bir menüyü görüntüler. Çoğaltmanıza gerek kalmayacak ve yönteminiz yeniden kullanılabilir ... ve muhtemelen çok sayıda menüden daha kolay yazılabilir ve gerçekten programlamadan zevk alırsanız, daha çok eğlenmişsinizdir. Bu zor değil - yazmanız gereken yöntem muhtemelen menünüzü elle oluşturmaktan daha az satırdı!
Mesele şu ki, bunu iyi yapmak için çok pratik yapmanız gerekiyor. Tekrarlanan kısımlarda tam olarak hangi benzersiz bilginin olduğunu analiz etmekte, bu bilgiyi çıkarmakta ve nasıl iyi ifade edeceğinizi bulmanız iyi olacaktır. Dizi ayrıştırma ve ek açıklamalar gibi araçları kullanmayı öğrenmek çok yardımcı olur. Hata raporlama ve dokümantasyon konusunda gerçekten net olmayı öğrenmek de çok önemlidir.
Basitçe iyi bir şekilde kodlayarak "Ücretsiz" bir uygulama elde edersiniz - heck şansı, bir kez iyi olduğunda bir DRY kodlamasının (tekrar kullanılabilir bir araç yazma da dahil) kopyalamanın ve yapıştırmanın ve tüm hataların, çoğaltılmış hataların kopyalanmasından ve yapıştırılmasından daha hızlı olduğunu bulmanızdır. ve kodlamanın neden olduğu zor değişiklikler.
DRY tekniklerini uygulayamasaydım ve elimden gelenin en iyisini yapsam işimden zevk alabileceğimi sanmıyorum. Kopyalama ve yapıştırma programlama yapmak zorunda kalmamakla birlikte ücretini kesmem gerekirse, alırdım.
Yani puanlarım:
- Kopyalama ve Yapıştırma işlemi, yeniden nasıl refactor yapılacağını bilmiyorsanız daha fazla zaman alır.
- Bunu yaparak, en zor ve önemsiz durumlarda bile DRY konusunda ısrar ederek refaktör yapmayı öğreniyorsunuz.
- Bir programcısınız, kodunuzu KURU yapmak için küçük bir araca ihtiyacınız varsa, onu oluşturun.
always
venever
kırmızı bayraklar gibi. "Bağlam" denen bir şey var,always
venever
hatta genel olarak iyi olmadığını kuralları, uygun olduğunu olmayabilir. Mutlak işlerle ilgilenen yazılım geliştiricilere dikkat edin. ;)