Senaryoyu tanımlamak için resmi bir anti-desen var mı?


10

Excel E-Tabloları (Office Birlikte Çalışma) oluşturmak için bazı kodlar yazılmıştır.

  • Kod çok kötü çalışıyor.
    • Bir alt sistem dosyaları gece oluşturmak için tasarlanmıştır. Performans geceleri endişe verici değildir.
      • Seçilen parametre kümesine bağlı olarak mevcut 100 farklı dosyadan doğru dosyayı seçmek için bir işlev oluşturulur.
      • Fiziksel dosyalar bulunduğundan, bu dosyaları yedeklemek için bir arşiv sistemi eklenir (Arşivlemek için bir neden yoktur. Bu dosyalar anında oluşturulmalıdır).
      • Bu sistem bir yapılandırma dosyası içermez, bunun yerine kodun çalıştığı sunucuya yansıyan sabit kodlu bir "sunucu seçici" işlevi vardır.
      • Bu hizmeti desteklemek ve çalıştırmak için zamanlanmış bir görev gereklidir.

Bu tek bir soruna dayanır. Orijinal kod, bir üretim ortamında çalıştırılamayacak kadar kötü performans gösteriyor.

Performans sorunu çözülmüş olsaydı, alt sistem ve daha sonra arşivleme sistemi, "dosya seçici fabrika işlevi", sabit kodlanmış hata noktası ve zamanlanan görevin ve ek hata noktasının bakımına gerek yoktur.

Bu bir "basamaklı başarısızlık" olacak. Orijinal sorun daha kötü kod, daha kötü çözümler ve gereksiz ek yüke yol açtı. Bunu tanımlamak için resmi bir anti-desen veya genel bir terim var mı?


1
Ölçeklenebilir olmayan kod mu? Barındırma sağlayıcınız bir ay içinde işten çıkarsa ve üretim ortamını yeni sunuculara taşımanız gerekiyorsa, bir yazılım sürümü ve genel acil durum paniğine ihtiyaç duyuyor mu? Sanırım cevabı biliyorsun ...
maple_shaft

1
Vay be, yaklaşık 12 yıl önce yazdığım bir rapor oluşturma uygulaması gibi geliyor. Peki, bir yapılandırma ve sabit kodlama eksikliği hariç. Arşivleme benim için olduğu gibi yasal bir gereklilik olabilir, işe yaramaz ama yine de gerekli. Performans ilk başta zayıftı, ancak düzgün bir şekilde optimize edilmiş ayrı bir raporlama DB'si yarattı. Yüksek düzeyde işlemsel bir DB ile ilgili raporlar çalıştırmak birçok kötü fikrin başlangıcıdır.
jfrankcarr

Yanıtlar:


23

Lav akışı?

Bilgisayar programlama jargonunda lav akışı, optimalin altında koşullar altında yazılan bilgisayar kodunun üretime sokulduğu ve hala gelişimsel durumdayken eklendiği bir sorundur.

Perl Design Wiki'den: Lava Flow, kod ... ortaya çıktığında ve kalıcı hale geldiğinde, arkeolojik çeşitliliğin mimari bir özelliği haline geliyor. mevcut kod tarihi bir merak olarak görülüyor. "

Genellikle, sistemi üretime sokmak, orijinal, eksik tasarımla geriye dönük uyumluluğun (birçok ek bileşen buna bağlı olduğu için) sürdürülmesi ihtiyacını doğurur.

Lav akışları genellikle bir proje üzerinde çalışan geliştirme ekibindeki değişikliklerle daha da kötüleşir. İşçiler projeye girip çıktıkça, sistemin yönlerinin amacına ilişkin bilgiler kaybolabilir ve bu parçaları temizlemek yerine, sistemin karmaşıklığını ve karışıklığını artırarak çalışırlar.

Lav akışı, zayıf tasarıma yol açan yaygın olarak karşılaşılan bir fenomen olan bir anti-desen olarak kabul edilir.


3
Bunu daha önce gördüm (Tamam tamam hemen hemen her gün görüyorum) ama adını asla yeni değil.
Kevin

3
Teşekkürler. Daha önce böyle dediğini duymamıştım. Ben genellikle kalıbı Winchester Gizem Evi olarak adlandırırım.
jfrankcarr

@jfrankcarr: Adını daha çok seviyorum. çok zeki.
Kevin

Lava akışının gerçekte bunun anlamı olduğunu sanmıyorum. Fikir, artık kullanılmayan kodun, gerçek kodun peyzajı üzerinde lav gibi konjuge olmasıdır. Kod hala kullanılıyorsa, muhtemelen ilk etapta farklı bir şekilde yapmak daha iyi olurdu.
psr

@psr - Kod "ortaya çıktığında ve kalıcı hale geldiğinde" "bölümü arkeolojik çeşitliliğin mimari bir özelliği haline gelir. İşler yapının üstünde sorgulanmadan ve altındakileri değiştirme umudu olmadan inşa edilir. Mevcut kod tarihsel bir merak olarak görülüyor. "
Olanlarla

3

Bunun bir anti-desen olduğundan emin değilim. Tüm anti-kalıplarda olduğu gibi, iyi bir fikir olduğunu düşünen her kimin yanlış olduğunu söyleyecek olmalıyız, ancak bu durumda kulağa mantıklı geliyor ve bunun için sözünüzü alacağım, yani sorun bu değil.

Sorun, bir anti-paternin bir tür genel tuzağı ve nasıl önlenebileceğini tanımlaması gerektiğidir. Bu durumda, sadece daha iyi performans yapmış olabilir kötü performans gösteren kod için bir çözüm bulmak olurdu sanırım.

Bir anti-desen olan IMHO ile ilgili sorun, bunu bilmenin çok değerli olmadığıdır. Bunu kim yapmış olsa bile, nasıl daha iyi performans göstereceğini bilmenin iyi olacağını zaten biliyordu, bu yüzden bunu nasıl yapacaklarını bilmemelilerdi. Bu yüzden genel durumu bir anti-desen olarak duymak gerçekten yardımcı olmazdı.

Açıklamak için genel bir terime gelince, "basamaklı başarısızlık", önerdiğiniz gibi, oldukça iyi çalışıyor. İlk etapta mantıklı olmayan bir görevde kalifiye olmayan insanlar için sevdiğim terim, snark avıdır , ancak bu durum için çok sert görünüyor. (Ama bildiğim gibi mahkum bir işletmenin en iyi tasviri olduğu için, bağlantıyı bir şekilde zahmetsizce atacağım).


+1 Pek çok iyi puan. Haklı olabilirsin. Sürecin bu yerde birkaç kez tekrarlandığını gördüm. Bu, onu bir Anti-kalıp olarak tanımlamak için motivasyonum. Bu sorunu düzeltmek yerine.
P.Brian.Mackey

3

Bunun yardımcı olup olmadığından emin değilim, ancak ofis otomasyonu genellikle özel bir durumdur:

Ofis otomasyonu genellikle bir kullanıcı masaüstünden (özellikle .net web siteleri için otomatikleştirilmesi gerekiyorsa) bu şekilde yapılır, çünkü ofis otomasyonu belgeleri, başsız çalıştırıldıklarında ofis birlikte çalışma araçlarında kötü sızıntılar olacağı konusunda sizi doğru şekilde uyarır. Bu araç seti ile ofis belgeleri oluşturmak için başsız süreçler yazmaya zorlandık, kurban hizmetleri olarak adlandırdık çünkü hafızayı geri almak için periyodik olarak onları öldürmeniz gerekiyordu.

Açıklamakta olduğunuz şeyi arşivlemek dışında bazı durumlarda maalesef en iyi yöntemdir.

Bağlantı: http://support.microsoft.com/kb/257757


+1 - Bu ilginç bir yorum. Bunu aklımda tutacağım. Hizmet sonra kalmak gerekiyor. Performans korkunç olsa da. 5 sütun ve 100'den az satır içeren bir e-tablo oluşturmak için 1 dakika. 100 e-tablo var ...
P.Brian.Mackey
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.