Bir proje geliştirirken sık sık yeniden tasarladığım kötü bir işaret mi?


39

Programlamaya ilk başladığımda bir gün bir projeye oturarak ve tüm sınıfların UML diyagramlarını çizerek bir projeye başlayacağım noktaya varacağımı, daha sonra buna bağlı kaldığımı varsaydım. Şimdi birkaç yıldır program yapıyorum ve bu şekilde sonuçlanmıyor. Bir projeden geçerken sık sık söylüyorum

  • "Hey, ben yapmak için bir sınıf gerekir _ _. Bunu daha önce düşünmedim."
  • “Bekle, bu işlev bunun yerine gerçekten o sınıfta olmalı. Ben onu taşıyacağım.”
  • “Bu aslında bir yerine iki sınıf olmalıdır. Ayrılacağım.”
  • “Bu üç bağımsız sınıfı tek bir soyut sınıftan miras almalıyım.”
  • Etcetera, vb.

Devam ederken bu şekilde yeniden tasarladığımın kötü bir işareti var mı? Bu kötü bir programcı olduğum anlamına mı geliyor yoksa bu normal mi?

Yanıtlar:


41

Bu, gelişimin normal bir parçasıdır. Sürekli Tasarımın temel ilkelerinden ikisi şöyledir:

  1. Her şeyi bilen değilsiniz, başlamadan önce tüm sistemi baştan sona bilemezsiniz.
  2. Tasarım statik değil. Bir proje uzun süredir kullanıldığında ve şu anda çözmekte olduğu problemler ilk yazıldığında çözdüğü problemler değil bu daha yaygındır.

Konuyla ilgili benim kişisel görüşüm, makro tasarım hakkında iyi bir fikre sahip olmanız , ancak mikro tasarımın gelişmesine izin vermeniz gerektiğidir . Bunu ifade etmenin bir başka yolu, (UML / modelleme araçlarıyla kullandığım kadarıyla) üst düzey tasarımın büyük olasılıkla bir projenin ömrü boyunca oldukça durağan kalacağıdır. Hangi yöntemlerin ve sınıf hiyerarşisinin ne yaptığını gösteren ayrıntılı tasarımın dövülebilir olması için ücretsiz olması gerekir.

Çözmekte olduğunuz problem hakkında pek bir şey bilmediğiniz zaman, çok daha ilk yanlış adımları yapacaksınız. Bununla birlikte, yeterince uzun süre çalıştıktan sonra, genel tasarım yerine oturmaya başlar ve bahsettiğiniz yeniden düzenlemeler, kodu düzenli tutmak için gerekli olan her şeydir.


3
+ 1, bu yüzden insanlar nesneleri seri hale getirme veritabanında -> ve sınıfınız yarın birden fazla parçaya patlatılmışsa, eski kodu etrafta tutmadan seri hale getirmeyi nasıl bıraktınız? Çekirdek sınıflarınızın gelişmekte özgür olduğu Protobuf alternatifini (depolama / mesaj alışverişi için ayrılmış sınıflar) tercih ediyorum ve sadece seri hale getirme / seri hale getirme katmanını uyarlamanız gerekiyor.
Matthieu M.

@Matthieu - bir veritabanı geçişi yazıyorsunuz. Bu nadiren yazmak ve test etmek bir saatten fazla sürer. Ruby on Rails, veritabanı geçişleri için çok hoş bir tesise sahiptir.
kevin cline

1
@kevin: Sanırım aynı veritabanlarına sahip değiliz, benimki birkaç yüz milyon hat içeriyor. Göç bir seçenek değildir .
Matthieu M.

+1 - Bir hata yaptığını itiraf edemeyecek kadar inatçı olmak iyi bir şey değil. Bazı insanlar hatalarınızı bir hafta sonu işareti olarak kabul ediyorlar, ancak çoğu kişi bunun için size saygı duyuyor olacak ve kesinlikle ciddi bir hatayla başa çıkma stratejiniz bunun bir hata olduğunu inkar etmekse, ikinci hatanın ölümcül olma ihtimalinin çok yüksek olduğunu düşünüyorsunuz.
Steve314

12

Yaptığınız şeye halk arasında "yeniden düzenleme" denir. Bunu yapmaktan vazgeçersen başın derde girer.

Gerçek şu ki çoğu kod karmaşık ve insanlar, oldukça akıllı olanlar bile, hepsini bir anda çözemiyor.



5

Bu tamamen iyi (bu yeniden tasarımlar her zaman büyük revizyonlar olmadıkça veya sıfırdan yeniden oluşturmadıkça). Endişelenme. Projenin başlangıcında bir UML diyagramı ile başlamak iyi olabilir, ancak işlerin değiştiğini hemen hemen her zaman keşfedeceğiniz için onu taşa oymayın. Başlangıçta bilmediğiniz yeni teknikler öğrenebilir, bazı özellikleri ilk tasarım sırasında hiç düşünmediğiniz şekillerde, işletme gereksinimlerinde değişiklik yapmak isteyebilirsiniz, bazen yalnızca ilk tasarım sırasında bilinmeyenler olabilir. sonradan hesaba katılması, vb ...

Ne olduğunu önemli onlar tasarımında önemli değişiklikleri, (siz dahil) başka gelecek geliştiriciler yansıtacak şekilde çok karıştı bitebileceğini bu ilk UML belgeler gidip yenilenmesini sağlar. Bu zor olabilir ve çoğu zaman iyi bir disiplin (ve zaman) gerektirir.

Çok çok var çok bir tasarım ile başlar ve uygulama dek kendisine% 100 uymak için nadir. Kişisel olarak çok küçük ve önemsiz programlar dışında böyle bir şey olduğunu hiç görmedim.


6
Adım 1: UML diyagramı oluşturun. Adım 2: Kod yaz. Adım 3: UML diyagramını bir kenara atın, böylece hiç kimse onu göremez ve kodun gerçekte nasıl çalıştığı hakkında kafaları karışır.
kubi

4

Yaptığınız şey tamamen normaldir (her seferinde sıfırdan baştan başlayamazsanız). Yirmi yıldan beri bu işteyim ve bu hala yinelemeli bir süreç.

Her şeyi ön plana çıkarabilecek ve yapışabileceğin tek zaman, en son çözdüğün problemin aynısını çözüyor olman, ve o zaman bile, muhtemelen iyileştirme için yer bulabilirsin.


2

Hiçbir şekilde son derece deneyimli bir geliştirici değilim ama bunu da yapıyorum. Son birkaç yıl boyunca, zihinsel olarak gerekli mimariyi inşa etme yeteneğim büyük ölçüde gelişti. Ancak ne kadar planlama yapsam da, bir parça yazılım yazdığımda, her zaman biraz yeniden tasarlanması gereken yerler vardır. Farkında değildim noktalar kod yazılana kadar kendimi tekrar ediyorum.

Bu yazının amacı, listenizdeki her şeyi yaptığımı ve sürekli olmadıkça ve verimliliğiniz üzerinde gerçek bir olumsuz etkiye sahip olmadıkça bu şeylerin mutlaka kötü olduğunu düşünmüyorum.


0

Buna yinelemeli süreç denir ve tüm modern yazılım geliştirme tekniklerinde temel bir kavramdır.

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.