“Tekerleği yeniden icat etmenin” karşısındaki antipattern'in adı ne? [kapalı]


101

" Tekerleği yeniden icat " antipattern oldukça yaygındır - hazır bir çözüm kullanmak yerine, sıfırdan kendi başınıza yazınız. Kod tabanı gereksiz yere büyür, aynı şeyi yapan, ancak biraz farklı bol olan biraz farklı arayüzler , hazır olan fonksiyonları yazmak (ve hata ayıklamak!) İçin zaman harcanır. Bunu hepimiz biliyoruz.

Ama spektrumun karşı tarafında bir şey var. İki kod satırı olan kendi işlevinizi yazmak yerine, bir çerçeve / API / kütüphane alırsınız, onu başlatır, yapılandırır, bağlamı çerçeve tarafından kabul edilebilir şekilde veri türüne dönüştürür, sonra tam olarak ihtiyacınız olanı yapan tek bir işlev çağırırsınız, soyutlama katmanlarının bir gigabaytının altında iki iş mantığı satırı. Ardından kütüphaneyi güncel tutmanız, yapı bağımlılıklarını yönetmeniz, lisansları senkronize tutmanız gerekir ve bunun başlatılması kodunuz, yalnızca "tekerleği yeniden icat etmekten" ziyade on kat daha karmaşık ve karmaşıktır.

Sebepler değişebilir: yönetim, maliyet ne olursa olsun, "tekerleğin yeniden icat edilmesine" kesinlikle karşı çıkmaktadır, birisi ihtiyaç duydukları marjinal örtüşmelere rağmen tercih edilen teknolojisini zorlar, sistemin eskiden önemli bir modülünün azalan rolü veya genişleme ve genişleme beklentisi henüz hiç gelmemiş olan veya sadece "ağırlığı" yanlış anlayan çerçevenin kullanılması, birkaç ithalat / include / load talimatı "perde arkasında" taşır.

Bu antipattern için ortak bir isim var mı?

(Doğru ya da yanlış olduğunda bir tartışma başlatmaya çalışmıyorum ya da gerçek bir antipattern ya da herhangi bir görüşe dayanıyorsa , bu basit ve basit bir isimlendirme sorusudur.)

Düzenleme: önerilen “yinelenen”, tamamen harici sistemlerden ayrı olarak “her şey için hazır” olması için kendi kodunu değiştirmekten bahsediyor. Bu şey bazı durumlarda ondan kaynaklanıyor olabilir, ancak genellikle “tekerleği yeniden icat etmekten kaçınmak” dan kaynaklanır - kodun her ne pahasına olursa olsun yeniden kullanımı; Bizim soruna bir "hazır" çözüm varsa, biz olacak o uyuyor ve ne gelir mal de ne kadar kötü olursa olsun, onu kullanın. Yeni kodun oluşturulması ve sürdürülmesi ile karşılaştırıldığında, bu bağımlılıkların entegrasyon ve bakım maliyetlerini tamamen göz ardı ederek, kod çoğaltması üzerine yeni bağımlılıklar yaratılmasının dogmatik olarak desteklenmesi.


52
Bağımlılık cehennemi . Bu aklıma gelen en yakın şey.
Machado

5
@ Machado: Güzel, bağımlılık cehenneminin bu anti-paternin bolluğunun doğrudan bir sonucu olduğunu söyleyebilirim; Aşırı karmaşık sistemler söz konusu olduğunda, karmaşıklığın basit bir sonucu olarak gelebilir.
SF.

27
Onu çağırır "bağımlılık sürünme" analog Feature_creep veya Scope_creep daha başlangıçta istenmeyen özellikler ürüne eklenir.
k3b

21
Tle sol-pad fiyasko eyleminde bu sendromun gerçek hayattan bir örnek.
SF.

13
Toplu olarak buna LeftPad olarak atıfta bulunmamızı tavsiye ederim.
RubberDuck

Yanıtlar:


9

Hayır. Tanımladığınız şeyi kapsayan yaygın kullanılan bir anti-patern adı yoktur.


4
Ortaya çıkardığı fikirlerin, önerilerin ve tartışmaların sayısıyla ortaya çıkıyor, bu doğru.
SF.

3
Bunu yaparken kirli hissediyorum.
SF.

Ha? "XXX yok" çok güçlü bir ifadedir ve ispatlanması çok zordur, özellikle de yorumlarda belirtilen birkaç aday olduğunu düşünüyoruz.
AnoE

1
@AnoE "Bu tür antipattern için ortak bir ad var mı?" Söz konusu yorum ve cevaplarda yer alan deliller, bunun olmadığı anlamına gelir. Doğru, başlığı cevaplamıyor, ancak soruyu kendisi cevaplıyor.
Kroltan

@Hayır Negatif ispat edemezsin tatlım. Belki de bir yerde Borneo'da bir kayanın altında saklanıyor ve biz henüz üstüne düşmedik? 1 yerine 10 cevap olduğunu, zilyon artışlı bir oylamanın benim için yeterli olduğunu kanıtladı.

49

Altın Çekiç

Altın çekiç, sadece fantezi olduğu için seçilen bir araçtır. Amaçlanan görevi yerine getirmek için uygun maliyetli veya verimli değildir.

kaynak: xkcd 801

(Aşağı oylara rağmen, bu cevabın başındayım. Tekerleği anlamsal olarak yeniden icat etmenin tam tersi olmayabilir, ama soruda belirtilen her örneğe uyar)



3
Temsilcilerim olsaydı, bunu reddederdim. Soruyu bir bütün olarak cevaplamıyor, ancak önerilen senaryolardan yalnızca birini cevaplayan bir (doğru) terim sunuyor.
David,

3
Bunun tersi istendi. Bu, "Becquerel" (radyasyon, birim s ^ -1'dir) müzik için Hertz (hz, birim s ^ -1) yerine her ikisi de "saniye" anlamına geldiği için müzik için kullanılabileceği konusunda ısrar ediyor.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Günümde oldukça tehlikeli bir müzik duydum.

34

Robert Martin , bu anti-paternin en belirgin olumsuz sonucuna atıfta bulunmak için " Çerçeve Bağlı " terimini kullanmaktadır . Desenin kendisi için ortak bir ad olduğunu sanmadığımdan, bu sonuca atıfta bulunmak çoğu amaç için yeterli olabilir.


1
Geliştirme sürecini hızlandırmak için çerçeveler mevcuttur. Bir güçlendirici rokete benziyorlar: en kısa sürede harcandı. Çözüm: sürüm bir, şimdi neredeydik? Bu doğru, yazılım geliştirmek. Sonraki! Bakım ayrı bir sorundur ve bence bugünlerde önemsiz olmalı. Bir sonraki çerçeveye bir sonraki çerçeveye geçin, acele edin.

18

" Burada İcat Edildi " başlıklı bu wikipedia sayfası, biraz farklı bir durumu ancak çok benzer sonuçlarla açıklamaktadır. Bir takımın, eşdeğer işlevsellik bulabildiğinde kendi kodlarını oluşturma yönündeki isteksizliğini açıklar.

Bu ismin biraz yanıltıcı olduğunu iddia ediyorum. Karşı tarafla bağlamda göründüğünde mantıklı değil Burada İcat, tekerleği yeniden icat etmenin hemen hemen eş anlamlısı.


13

" Versus Build " ve " Invented Here " ' ı duydum , kurum içi bir şeyleri geliştirmeye karşı önyargılı isimler olarak, bunu yapmak mantıklı olsa bile. (Ve "satın almaya karşı yapı" ibaresinin uygulanabilir alternatifler arasında bir seçenek belirtmesi beklenirken , birisinin "satın almanın" doğru seçim olduğuna inandığında genellikle söz edildiğini anlıyorum .)



8

Şişirme geniş bir terimdir, ancak tarif ettiğiniz şeyi içerebilir. Yazılımımız, gerekli tüm ekstra dönüşümler ve soyutlamalar nedeniyle aşırı derecede karmaşıklaşır (şişirilir) ve hem karmaşıklık hem de bağımlılıklar düşük performans / daha az verimlilik ve daha yüksek kaynak tüketimine (disk, bant genişliği) katkıda bulunur.

Arzu edersek, şişirilmiş bağımlılıklar gibi bir terimle netleşebiliriz .


5

Bence bir ceviz bir balyoz kullanarak oldukça yakındır. Bu mümkün olan bir şeydir, ancak olası bir çok istenmeyen yan etki olmadan, bir somunu bu şekilde kırmak için aşırı miktarda çalışmaya ihtiyaç vardır. (Ve kırılacak bir sürü fındık var ...)

Bu cümle aynı zamanda bilgisayar jargonu olma avantajına sahiptir, bu yüzden hiç kimseye bir ipucu vermemek çok yardımcı olabilir.

Bu arada, bağımlılık cehennemi ile çizilmesi gereken bir ayrım var . Birisi, basit, anlaşılır, kullanımı kolay arayüzler yaratan ve CPU çevrimlerinde veya bellek kullanımında cezanın aşırı olmaması ve kapsüllenmiş kodun gelecekteki modifikasyonunun mümkün olmaması koşuluyla, enkapsülasyon içindeki tüm karmaşıklıkları önceden sarmışsa gerekli, sonra kullanmaya karşı kalan bir argüman neden olabileceği bağımlılığı cehennemdir.


5

Kesin bir analog olduğunu sanmıyorum, ancak aşırı tasarımın veya aşırı mühendislik yapmanın en yakın olduğunu söyleyebilirim .

En azından, tarif ettiğinize benzer bir şeyle karşılaştığımda gerçekten olan şeyin bu olduğunu iddia ediyorum.

Aynı işlevselliği uygulamak için kendi kodunuzu yazmak yerine bir kütüphane kullanmak neredeyse hiçbir zaman zararlı değildir.

Varsayım örneğinizde bile, "iki kod satırını" değiştirmek için bir kütüphane kullanmak gerekmeyebilir, ancak size çok fazla üzülmeniz gerekmez - eğer gerçekten iki kod satırınızla aynı şeyi yapmayı amaçlayan bir kütüphane ise .

Basit bir şey yapmak için bir kütüphane de basit olacaktır. Size sorunuzun ima ettiği baş ağrısını verme olasılığı yüksek değil.

Basit bir şey yapmak için karmaşık bir kütüphane kullanmak muhtemelen gerekli işlevselliği uygulamaktan daha fazlasını yapmaya çalıştığınız anlamına gelir.

İhtiyaç duyulmayan özellikleri inşa etmek, asla gelmeyecek bir geleceğe hazırlamak, vb.

Buradaki sorun gerçekten tekerleği yeniden icat etmek başarısızlık değildir haddi zatında .


4

Tekerleği yeniden icat etmediyseniz, büyük olasılıkla bir satıcı veya 3. tarafça sağlanan mevcut bir tekerlek setini kullanıyor.

Bu bir anti-kalıp ise, genellikle satıcı kilitlemesi olarak adlandırılır.


6
Gerçekten aynı şey olduğunu hissetmiyorum. Satıcı kilitlenmesi , bir satıcının çözümüne bağlı olarak, satıcının kullanımının seçim yapıldığında maliyet etkin olup olmadığına bağlı olarak ortaya çıkan olumsuz bir sonuçtur . OP, entegrasyon maliyeti sıfırdan yeni bir çözüm geliştirme maliyetinden daha yüksek olduğunda üçüncü taraf bir çözüm seçme için bir terim hakkında daha fazla soru soruyor (ve satıcı kilitlenmesinin olacağı durumlarda muhtemelen gerçekleşmiyor bile) satıcıya güvenmek yerine yeni bir çözüm geliştirmek için ucuz olun).
Ben

@Ben - Tamam, satıcı kilidinin tersine bağlı olarak bağlı olan Framework'ü daha iyi seviyorum. Bu soru kanaatine dayalı ve bu benim aklıma ilk gelen şeydi.
Jon Raynor

0

İş güvenliği?
Bazı şeyleri senkronize etmek için harcadığınız tüm çabadan bahsediyorsunuz, vb. Bazı insanlar diğer insanların kodlarını kendi yazılarını yazmak yerine yönetmeyi tercih eder. Özellikle yöneticileri.

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.