Yan not olarak: yeni bir iş arayın. Bu daha iyi olamazdı.
İncelemekte olduğunuz kodun hedefleri:
İlk amaç, birim, entegrasyon, sistem ve fonksiyonel testlerin burada olup olmadığını, ilgili olduklarını ve test edilmesi gereken tüm durumları kapsadıklarını kontrol ederek gözden geçirilir. Ayrıca , orijinal yazarın programlama diliyle ilgili, ince hatalara veya gerçekte olduğundan farklı bir şey yapıyormuş gibi yapan kodlara neden olabileceği inançlarını da kontrol etmelisiniz .
İkinci hedef, sorunuzun odaklandığı hedeftir. Bir yandan yeni kanunun teknik borcu artırması beklenmiyor. Diğer yandan, incelemenin kapsamı kodun kendisidir, ancak tüm kod tabanı bağlamındadır. Oradan, bir hakem olarak, orijinal yazardan iki yaklaşım bekleyebilirsiniz:
Dış kod benim hatam değil. Ben sadece özelliği uygulamak ve tüm kod temeli umurumda değil.
Bu perspektifte, kod, kod tabanının kusurlarını kopyalayacak ve böylece kaçınılmaz olarak teknik borcu artıracaktır : daha kötü kod her zaman daha kötüdür.
Bu kısa vadeli geçerli bir yaklaşım olmakla birlikte, uzun vadede artan gecikmelere ve düşük üretkenliğe yol açacak ve sonuçta geliştirme sürecinin o kadar pahalı ve riskli olmasına yol açacak ki, ürün evrimini durduracaktır.
Yeni kod yazmak, eski kodu yeniden düzenlemek için bir fırsattır.
Bu bakış açısıyla, eski koddaki kusurların yenisi üzerindeki etkisi sınırlı olabilir. Ayrıca, teknik borç, kod büyümesiyle orantılı olarak azaltılabilir veya en azından artırılamaz.
Bu geçerli bir uzun vadeli yaklaşım olsa da, kısa vadeli riskleri vardır. Bunlardan en önemlisi, kısa vadede, belirli bir özelliğin gönderilmesinin bazen daha fazla zaman alacağıdır. Bir başka önemli husus, eski kodun test edilmemesi durumunda, yeniden düzenleme, gerileme getirme konusunda büyük bir risk oluşturmasıdır.
Teşvik etmek istediğiniz perspektife bağlı olarak, gözden geçirenlere daha fazla yeniden odaklanmalarını tavsiye etme eğiliminde olabilirsiniz. Her durumda, berbat bir kod tabanında güzel mimari ve tasarıma sahip kusursuz, temiz bir kod parçası beklemeyin. Ne olmamalıdır teşvik berbat bir kod temeli denemelerde işe sahip bilgili bir geliştirici yapmak davranıştır üzerine düşeni iyi. İşleri daha basit hale getirmek yerine, daha önce olduğundan daha karmaşık hale getirir. Şimdi, tek biçimli kötü kod yerine, tasarım desenleri olan bir parçanız, temiz, açık kodlu başka bir parçanız, zamanla yoğun bir şekilde yeniden düzenlenmiş başka bir parçanız var ve hiçbir birlik yok.
Örneğin, orta boyutlu bir web sitesinin eski bir kod tabanını keşfettiğinizi düşünün. Herhangi bir olağan yapının olmaması ve günlüğe kaydetme işleminin bittiğinde, bir günlük dosyası kullanmak yerine bir metin dosyasına el ile şeyler ekleyerek yapılması sizi şaşırtıyor . MVC'yi ve bir günlük kaydı çerçevesini kullanmak için yeni özelliğe karar verirsiniz.
İş arkadaşınız başka bir özellik uyguluyor ve mükemmel boyutta bir ORM eksikliğinden çok şaşırıyor. Böylece bir ORM kullanmaya başlar.
Ne siz ne de meslektaşınız her yerde MVC, bir günlük çerçevesi veya bir ORM kullanmak için yüz binlerce satırdan geçemiyor. Aslında, aylarca çalışma gerektirecekti: MVC'yi tanıttığınızı hayal edin; ne kadar sürer? Ya da kimsenin anlayamadığı kod içinde SQL sorgularının düzensiz olarak (zaman zaman SQL Enjeksiyonu için yerlerle) SQL sorgularının oluşturulduğu durumlarda ORM?
Harika bir iş çıkardığınızı düşünüyorsunuz, ancak şimdi projeye katılan yeni bir geliştiricinin öncekinden çok daha karmaşık olması gerekiyor:
Talepleri ele almanın eski yolu,
MVC yolu,
Eski kayıt mekanizması,
Günlük kaydı çerçevesi,
Anında SQL sorguları ile veritabanına doğrudan erişim,
ORM.
Çalıştığım bir projede, yan yana kullanılan dört (!) Günlük çerçevesi (artı manuel günlük kaydı) vardı. Bunun nedeni, birisinin her şeyi günlüğe kaydetmek istediğinde, bunu yapmak için ortak bir yaklaşım yoktu, bu nedenle yeni bir çerçeve öğrenmek yerine (her durumda kod tabanının sadece% 5'inde kullanıldı), biri basitçe başka bir çerçeve ekleyecekti. Zaten biliyor. Dağınıklığı hayal edin.
Daha iyi bir yaklaşım, kod tabanını her seferinde bir adım yeniden düzenlemektir. Bir kez daha günlüğe kaydetme örneğini alarak, yeniden düzenleme aşağıdaki küçük adımlardan oluşur:
Eski günlüğe kaydetmenin yapıldığı tüm yerleri bulun (yani günlük dosyasına doğrudan erişildiğinde) ve hepsinin aynı yöntemleri çağırdığından emin olun.
Varsa, bu kodu özel bir kitaplığa taşıyın. Alışveriş sepeti sınıfımda depolama mantığı kaydetmek istemiyorum.
Gerekirse, günlüğe kaydetme yöntemlerinin arabirimini değiştirin. Örneğin, mesajın gayri resmi mi yoksa uyarı mı yoksa hata mı olduğunu gösteren bir seviye ekleyebiliriz.
Yeni özellikte yeni yeniden düzenlenmiş yöntemleri kullanın.
Günlüğe kaydetme çerçevesine geçiş yapın: etkilenen tek kod, ayrılmış kitaplık içindeki koddur.