Önceden var olan kötü uygulamaları veya eski yasalara uymayan iyi uygulamaları kullanmak daha mı iyi?


25

Bunu düşünüyordum, çünkü mevcut bir üçüncü parti yazılım için bir uzantı yazmaya çalışıyordum ve veritabanları korkunç şekilde denormalize edildi. Mevcut tablolarını kullanmam ve bir sürü yeni alan eklemem gerekiyordu.

Tasarım stilinde yeni tabloları oluşturma (neredeyse tüm büyüklüklerin büyük bir tabloda yer almasından oluşuyordu) ya da tamamen yeni bir tablo seti oluşturma ve yeni ile arasındaki verileri senkronize etmek için Tetikleyiciler gibi fazladan bir şey kullanma seçeneğim vardı. Eski masalar

Mevcut kötü tasarım stilini kullanma seçeneğiyle başlamıştım, ancak şu sorudan ayrıldım: Önceden var olan kötü uygulamalarla gitmek ya da mevcut kodla iyi oynamayan iyi uygulamaları uygulamak daha mı iyi? Birini diğerinden seçmem gereken durumlar var mı?

NOT: Şimdiye kadar birçok cevabın yavaş bir şekilde kötü kodu tekrar gözden geçirmesi ile ilgisi var, ancak bunu yapamıyorum. Kod bizim değil ve satıcı tarafından sık sık güncelleniyor. Sadece üzerine inşa edebilirim.



Teşekkürler Peter, bu soruyu görmedim. Benim sorduğum şeye çok benziyor, çünkü cevaplar varolan kötü koda eklenmek yerine varolan kodu yeniden düzenlemeyle ilgili görünüyor. Var olan kodu yeniden aktive edemiyorum, sadece üzerinde kurabiliyorum.
Rachel

Şu andaki işvereninizle ne kadar kalmak istediğinize bağlı olarak;)
Job

Yanıtlar:


21

Aşağıdaki durumlarda daha iyi bir tasarım seçmelisiniz:

  1. Gelecekteki kodlamanın büyük bir bölümünü devralacaksın

  2. Daha iyi tasarım, uzun vadede müşteriye daha pahalı değildir. Mesela, yıl sonuna kadar devam etmeyen projeler için çok aylı "yeniden düzenlemelere" tanık oldum.

Aşağıdaki durumlarda "aynı kötü stili" seçmelisiniz:

  1. Sadece yardım ediyorsun. Mevcut bir gruba katılabileceğinizi düşünmek gerçekçi değildir ve projeyi yalnızca yarı zamanlı olarak dolduruyorsanız daha yüksek tasarım standartlarına ulaştırır. Daha iyi tasarım özneldir ve neredeyse her zaman bir öğrenme eğrisi vardır. Eğer bu yeni tasarım ekibin geri kalanı tarafından öğrenilmezse, o zaman proje bir stil uyumu ile sonuçlanacak ve daha iyi tasarlanmış kodunuz kimsenin değişmediği bir şeyle sonuçlanabilir çünkü anlayamazlar o. Yukarıdaki örnekte, üçüncü taraf yazılımında güncelleme varsa ne olur?

  2. "Daha iyi" tasarımdan ödün vermek size somut bir iş avantajı sağlayacaktır. Özellik X eklemek gibi kötü büyük bir sözleşme alacak, ancak son tarih eksik, hiçbir şey ile sonuçlanmasına neden olur. Burası, yönetim ekibi ile teknik ekip arasındaki tarihi çatışmanın yaşandığı yerdir. Bir ev tadilatı gibi, birinin ne zaman ödeme yapması gerektiğine karar vermesi gerekir. Borcunuzu, başlangıçta bir yıl elektriksiz ya da su tesisatı olmadan yaşayarak ödeyebilirsiniz. Veya bu araçlara sahip olmanın yararı ile 3 kat fazla ödeme yapabilirsiniz.


Kötü tasarım konusunda iyi bir tasarıma ne zaman gideceğinize dair harika örnekler ve bunun tam tersi, teşekkürler :)
Rachel

11

Uzun vadede iyi uygulamaları kullanmak daha iyidir. Değişikliklerin uygulanması daha az zaman alacağından zaman ve emek tasarrufu sağlayacaktır.

Mümkünse, refactor'a iyi uygulama için küçük adımlar atın (örneğin: SQL'de normalize etmek için denoramlize tabloları kırmak ve eski tablo adlarıyla görünümleri kullanmak).

Uzun vadede söylediğimi not edersiniz - "kalite, zaman, para" üçgeni burada da geçerlidir (yani, iki tane seçin). Vaktiniz yoksa, eski uygulamalara gitmeniz gerekebilir, ancak bu, soruna ekli olduğunuz ve tasarımınızın da düzeltilmesi gerektiği anlamına gelir.

Çalışmaya ve kötü tasarım kodu eklemeye devam ederseniz, asla iyi tasarım kullanan bir kod temeli oluşturmazsınız. Mümkün olduğu kadar iyi tasarım için iyi tasarım ve refactor kullanmaya çalışın.


SQL verileri için bu çözümü hiç düşünmedim. Ne yazık ki, hala düzenli güncellemeler yayınladıkları için kod tabanlarını düzenlememe izin verilmedi. Eklediğim her şey tamamen ayrı olmak zorunda.
Rachel

1
@Rachel - Yeni tabloların kontrolü sizde ise, onlar için iyi tasarım kullanın (eski tasarıma yapılan güncellemelerin yeni tabloları etkilemeyeceğini varsayıyorum). Kodunuzu değiştirmeniz gerektiğinde, bakım maliyetleriniz düşecektir.
Oded

Yazılım sıklığındaki güncellemeler veritabanı güncellemelerini ve yeni alanları içerir, bu nedenle mevcut tabloları silmek ve görünüm olarak yeniden yazmak benim için uygun bir seçenek değildir. Kullanıcılar hala bu tabloları kullanan yazılımın mevcut bölümünü kullanıyorlar, sadece bir uzantıya ihtiyaçları var. Eğer bu bir 3. parti satıcının yerine bizim kodumuz olsaydı, bunu bir kalp atışıyla uygulardım :) Genel sorum olsa da, genel bakış açısına göre.
Rachel

1

Bence her davaya çok bağlı. Performans ve tasarım buna izin veriyorsa, iyi uygulamaları kullanmak daha iyidir. Ancak, eğer bu masa yüksek erişimli bir masa ise, o zaman samimiyet için bir tetikleyici yaratmanın performans üzerinde olumsuz bir etkisi olabilir.

Şimdi, müşteriniz daha iyi bir tasarım kullandığınızı görmeyecek, çözümünüzün sistemi yavaşlattığını görecek. Bu tür bir karar durum bazında verilmelidir ve karar vermek için deneyiminizi ve ölçütlerinizi kullanmalısınız.

Bence doğru seçimi yaptın.


1

Mümkün olduğunca, uygulama kodunuzu zayıf veri tasarımından ayırmalısınız.

Tablolarını güncelliyor musunuz? Değilse, bu tabloları uygulamanıza uygun bir şekilde sunmak için SQL görünümleri oluşturun. SQL görünümleri yazmak nispeten kolaydır ve uygulama kodundan daha kolay test edilir.

Eski tabloları güncellemeniz gerekiyorsa, güncellemeleri yönetmek için saklı yordamları yazmayı düşünün. Yazmaları biraz daha karmaşıktır, ancak anında test edilebilirler.


1

Bir veritabanını tetikleyicilerle normalleştirdiğinizde eski kodu senkronize etmek için, geçici ise iyi bir çözümdür. Amaç eski kodu değiştirmek olmalı, ancak üçüncü taraflarla iş yaparken bu işe yaramayabilir. Şema değişikliklerinin zirvesinde kalmak zorunda kalacaksınız.

Kötü kod üzerinde daha fazla özellik kazık sürekli problemler yaratacak. Çalışma çevresi norm haline geldi. Kullanıcılar çok fazla zaman alacak ve muhtemelen başka hatalar veya kısıtlamalar getireceklerinden dolayı sinirlenecekler. Bunu yapmamamız yerine bunu yapamayacağımızı söyleyen programcı kim olmak ister?

Bazı kodlar yalnız bırakılabilir; biz her zaman bu lüks olmaz.


-1

Burada teknik borçlarla uğraşıyorsunuz. Kısacası, teknik borç, zaman içinde ödemek zorunda olduğunuz ve bir noktada, geri ödemeniz gereken bir faiz anlamına gelir.

Develloper'ın zamanının maliyeti vardır, teknik borç da gerçek borç gibi görülebilir ve maliyeti gerçek paradır.

Temelde iki ana çözümünüz ve aralarında birçok çözümünüz var. Bu borcu şimdi iade etmek istemediğinize karar verebilir ve faiz ödemeye devam edebilirsiniz. Açıkçası, bu uzun vadede daha pahalıya mal olacak, ancak şu anda sonuç almanıza izin verecek. Ayrıca bu borcu iade etmeyi de seçebilirsiniz, böylece geri ödemediğiniz sürece bir daha ileri gidemezsiniz, ancak sonunda faizsiz kalırsınız.

Genellikle teslimat için son tarihleriniz vardır ve bir son tarihin eksik olması müşterinizin güvensizliğine neden olur ve sonunda kaybedersiniz. Bu, teknik borç almak için geçerli bir neden olabilir: Müşteriyle kazandığınızın, teknolojik borcun ekstra masrafına değdiğini düşünüyorsunuz.

Sonunda, yeni metodolojiyi benimsemeniz gerektiğini biliyorsunuz, aksi halde, daha fazla borç alacaksınız ve sonunda iflas edeceksiniz (şimdi siz insanlar yeniden sıfırdan başlamaya karar verdiğinde veya projenin fena halde başarısız olduğu durumlarda).

Mevcut kod tabanını nasıl değiştireceğinizi ve zaman içinde yeni uygulamaya geçeceğinizi planlamanız ve değişiklikleri günlük olarak bit bit dağıtmanız gerekir. Bir noktada, yeniden yapılanma, başka kayıplara yol açacağı zaman, hangi kaybın daha kötü olduğunu düşünün ve en iyisini seçin.

Yeniden ateşlemenin maliyeti zamanla artacaktır (bu, teknolojik borcun çıkarlarıdır). Böylece bu sonuçta en pahalı seçenek haline gelecektir.

Patronunuzun teknik borç kavramını anladığından emin olun. Önlemle olsa bile, teknik borç yaratırsınız. Bir noktada, para iadesi için kullanılacak. Kasten teknik borç yarattığınızda, bunun için geçerli bir nedeniniz olmalı ve borcu bir yatırım olarak görmelisiniz (tıpkı gerçek borç gibi). Diğer durumlarda, sadece bilerek teknik borç YAPMAYIN.

DB'yi geliştirmek ve aşırı tüketim evrimlerini dağıtmak için metodolojiler ilginizi çekebilir: http://richarddingwall.name/2011/02/09/the-road-to-automated-database-deployment

Bu arada, bu zor bir iş, çok iyi şanslar. Buna değer !


-1

Bu tipik bir sorundur: "İşimin faydalarını şimdi mi yoksa sonra mı kullanmam gerekiyor?" ve bu cevaba genel bir çözüm olabileceğini sanmıyorum. Sadece böyle bir karara dahil olan tüm faktörleri (teknik ve insan) biliyorsunuz.

Bununla birlikte, problemin ilginç bir soru ortaya çıkarır:

Otomatik kod yeniden düzenleme özelliği, kod tekdüzeliklerine daha fazla değer verilmesi için yeterli ilerleme sağlıyor mu?

Sonuçta, kötü tasarım değişmeli veya ölmelidir. Ya da kötü bir tasarım değil. Buradaki asıl soru yeniden yapılanmanın maliyeti ile ilgili. Sorunuzdan açıkça görüyorsunuz ki, siz (veya işvereniniz) şimdi bedelini ödemeye istekli değilsiniz ve mevcut teknoloji durumunda, hiç istemediğiniz.

Ancak, kod yeniden düzenleme otomasyonu bazı ilerlemeler sağlıyor. Derleyiciler bugün ikili dosyaları optimize edebilirlerse, yarın kodu optimize etmeyeceklerini kim söyleyebilir? Bir noktada, geliştiricilerin ve tasarımcıların daha yeni gereksinimlere uyum sağlamak için kodlarını çok kolay bir şekilde yeniden düzenlemelerine izin veren bir araç ortaya çıkacak. Ne de olsa, eski kodlarla uğraşmak günümüzün en büyük zorluklarından biridir.

Eğer böyle bir araç varsa (çoktan yaptığıma şaşırmam), böyle bir karar verirken dikkate almak iyi olurdu.


-2

İyi uygulamalar her zaman fakir olanları koyar. Kod tabanınız kodla yanlış şekilde çevrilmişse, kendi mallarınızı aynı şekilde kargola yetiştirmemelisiniz, doğru şekilde kod yazmalı ve ardından herkesi doğru şekilde eğitmeye çalışmalısınız.


Bir geliştirici olarak mutlak ifadelerin tehlikesini bilmelisiniz.
whatsisname,

Ayrıca kötü uygulamalarla uğraşmanın ve yanlış kod yazmanın tehlikesini de biliyorum ve IMO bu en kötü tehlike.
Wayne Molina
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.