Jak nazywa się antipattern przeciwny „wynalezieniu koła”? [Zamknięte]


101

Antypattern „ Reinvent the wheel ” jest dość powszechny - zamiast używać gotowego rozwiązania, napisz własne od zera. Baza kodu rośnie niepotrzebnie, nieco inne interfejsy, które robią to samo, ale nieco inaczej obfitują, marnuje się czas na pisanie (i debugowanie!) Funkcji, które są łatwo dostępne. Wszyscy to wiemy.

Ale jest coś na drugim końcu spektrum. Kiedy zamiast pisać własną funkcję, która składa się z dwóch wierszy kodu, importujesz platformę / interfejs API / bibliotekę, tworzysz jej instancję, konfigurujesz, konwertujesz kontekst na typ danych jako akceptowalny przez platformę, a następnie wywołujesz tę pojedynczą funkcję, która robi dokładnie to, czego potrzebujesz, dwie linie logiki biznesowej pod gigabajtem warstw abstrakcji. A potem musisz aktualizować bibliotekę, zarządzać zależnościami kompilacji, synchronizować licencje, a kod jej tworzenia jest dziesięć razy dłuższy i bardziej złożony niż w przypadku „ponownego wynalezienia koła”.

Przyczyny mogą być różne: kierownictwo ściśle przeciwstawiające się „nowemu wynalezieniu koła” bez względu na koszty, ktoś popychający swoją ulubioną technologię pomimo marginalnego nakładania się na wymagania, malejąca rola dawnego głównego modułu systemu lub oczekiwanie rozszerzenia i szerszego użycie frameworka, który po prostu nigdy nie nadchodzi, lub po prostu niezrozumienie „wagi” kilku instrukcji importu / włączenia / załadowania zawiera „za kulisami”.

Czy istnieje wspólna nazwa dla tego rodzaju antypatternu?

(Nie próbuję rozpoczynać dyskusji, gdy jest to dobre lub złe, lub jeśli jest to prawdziwe antypattern lub cokolwiek oparte na opiniach , jest to proste, proste i obiektywne pytanie dotyczące nomenklatury.)

Edycja: sugerowany „duplikat” mówi o nadinstruowaniu własnego kodu, aby był „gotowy na wszystko”, całkowicie poza systemami zewnętrznymi. To może w niektórych przypadkach wynikać z tego, ale generalnie pochodzi od „niechęci do ponownego wynalezienia koła” - ponowne użycie kodu za wszelką cenę; jeśli „gotowe” rozwiązanie naszego problemu istnieje, my będziemy go używać, bez względu na to, jak słabo to pasuje i jakim kosztem chodzi. Dogmatycznie faworyzuje tworzenie nowych zależności niż powielanie kodu, z całkowitym lekceważeniem kosztów integracji i utrzymania tych zależności w porównaniu z kosztami tworzenia i utrzymania nowego kodu.


52
Piekło zależności . To najbliższe, o czym myślę.
Machado,

5
@Machado: Fajnie, choć powiedziałbym, że Piekło Zależności jest bezpośrednim wynikiem obfitości tego anty-wzoru; w przypadku bardzo skomplikowanych systemów może to wynikać ze złożoności.
SF.

27
Nazwałbym to „pełzaniem zależności” analogicznym do Feature_creep lub Scope_creep, w którym do produktu dodano coraz więcej pierwotnie niepożądanych funkcji.
k3b

21
TLE lewy pad fiasko jest prawdziwa natura przykładem tego zespołu w akcji.
SF.

13
Zalecam, abyśmy zaczęli wspólnie nazywać to LeftPad.
RubberDuck

Odpowiedzi:


9

Nie. Nie ma powszechnie używanej nazwy anty-wzorca obejmującej to, co opisujesz.


4
Pojawia się z liczbą pobudzonych pomysłów, sugestii i dyskusji, jest to w rzeczywistości poprawne.
SF.

3
Czuję się przy tym brudny.
SF.

Co? „Nie ma XXX” to bardzo mocne stwierdzenie i bardzo trudne do udowodnienia, zwłaszcza biorąc pod uwagę, że w komentarzach wspomniano o kilku kandydatach.
AnoE

1
@AnoE „Czy istnieje wspólna nazwa tego rodzaju antypatternu?” Dowody w wymienionych komentarzach i odpowiedziach mocno sugerują, że nie ma. To prawda, że ​​nie odpowiada na tytuł, ale odpowiada na samo pytanie.
Kroltan

@AnoE Nie możesz udowodnić negatywnego, hon. Może termin ukrywa się gdzieś pod skałą na Borneo i jeszcze się nad nim nie przewróciliśmy? To, że jest 10 odpowiedzi zamiast 1 z zillionem głosów pozytywnych, jest dla mnie wystarczającym dowodem.

49

Złoty Młot

Złoty młot jest narzędziem wybranym tylko dlatego, że jest fantazyjne. Wykonanie zamierzonego zadania nie jest ani opłacalne, ani wydajne.

źródło: xkcd 801

(Pomimo głosów negatywnych, podtrzymuję tę odpowiedź. To może nie być dokładnie odwrotnością semantycznego ponownego wynalezienia koła, ale pasuje do każdego przykładu wymienionego w pytaniu)



3
Głosowałbym za tym, gdybym miał przedstawiciela. Nie odpowiada na pytanie jako całość, ale oferuje jeden (dokładny) termin, który odpowiada tylko na jeden z sugerowanych scenariuszy.
David

3
Poproszono o coś przeciwnego. To jest jak naleganie, aby „Becquerel” (promieniowanie, jednostką jest s ^ -1) można użyć do muzyki zamiast herc (hz, jednostką jest s ^ -1), ponieważ oba oznaczają „na sekundę”.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen Słyszałem w ciągu dnia całkiem niebezpieczną muzykę.

34

Robert Martin używa terminu „ Framework Round ” w odniesieniu do najbardziej oczywistej negatywnej konsekwencji tego anty-wzoru. Ponieważ nie sądzę, aby istniał jakaś wspólna nazwa dla samego wzorca, odniesienie do tej konsekwencji może wystarczyć do większości celów.


1
Istnieją ramy przyspieszające proces rozwoju. Są jak rakieta wspomagająca: zużyte, gdy tylko zostaną użyte. Rozwiązaniem jest - wypuść wersję pierwszą, gdzie teraz byliśmy? Zgadza się, tworzenie oprogramowania. Kolejny! Konserwacja to osobna kwestia i myślę, że obecnie powinna być nieistotna. Przejdź do następnego rozwiązania, pospiesz się.

18

Ta strona Wikipedii na „ Wymyślono tutaj ” opisuje nieco inną sytuację, ale z bardzo podobnymi efektami końcowymi. Opisuje awersję zespołu do tworzenia własnego kodu, gdy można tam znaleźć równoważne funkcje.

Twierdziłbym jednak, że nazwa ta jest nieco myląca. Ma sens, gdy jest umieszczony w kontekście z jego przeciwieństwem Not Invented Here, który IMHO jest właściwie synonimem Reinventing the wheel.


13

Słyszałem słowa „ Kup kontra buduj ” i „ Wymyślono tutaj ” jako nazwy anty-wzorcowe, mające na celu zapobieganie tworzeniu własnych rozwiązań, nawet jeśli może to mieć sens. (I chociaż wyrażenie „kup kontra buduj” ma wskazywać na wybór między realnymi alternatywami, to zwykle jest wspomniane, gdy ktoś uważa, że ​​„kup” jest właściwym wyborem).



8

Wzdęcie jest szerokim pojęciem, ale może obejmować to, co opisujesz. Nasze oprogramowanie staje się nadmiernie złożone (rozdęte) z powodu wszystkich dodatkowych wymaganych transformacji i abstrakcji, a zarówno złożoność, jak i same zależności przyczyniają się do niższej wydajności / mniejszej wydajności i wyższego zużycia zasobów (dysku, przepustowości).

Jeśli chcielibyśmy, moglibyśmy wyjaśnić terminem takie jak rozdęte zależności .


5

Myślę, że użycie młota do roztrzaskania orzecha jest dość zbliżone. Jest to coś, co jest możliwe, ale wymaga nadmiernej ilości pracy, aby złamać w ten sposób jednego orzecha, bez żadnych możliwych niepożądanych efektów ubocznych. (I jest cała torebka orzechów do zgryzienia ...)

Wyrażenie ma również tę zaletę, że nie jest obliczeniem żargonu, więc może być bardzo pomocne w przekazywaniu wskazówek komuś, kto go nie zna.

Nawiasem mówiąc, należy wyróżnić piekło uzależnienia . Jeśli ktoś zawinął już wszystkie zawiłości wewnątrz enkapsulacji, która tworzy proste, jasne i łatwe w użyciu interfejsy, i pod warunkiem, że kara w cyklach procesora lub zużyciu pamięci nie jest nadmierna, i pod warunkiem, że w przyszłości modyfikacja enkapsulowanego kodu nie będzie prawdopodobnie potrzebne, następnie pozostałym argumentem przeciwko jego użyciu jest piekło zależności, które może powodować.


5

Nie sądzę, że istnieje dokładny analog, ale powiedziałbym, że nadprojektowanie lub nadinżynieria są najbliższe.

Przynajmniej będę argumentować, że to, co się naprawdę dzieje, kiedy napotkały coś podobnego do tego, co można opisać.

Korzystanie z biblioteki zamiast pisania własnego kodu w celu wdrożenia tej samej funkcjonalności prawie nigdy nie jest szkodliwe.

Nawet w twoim hipotetycznym przykładzie użycie biblioteki do zastąpienia „dwóch linii kodu” może nie być konieczne, ale jest mało prawdopodobne, aby wywołało u ciebie wiele smutku - jeśli tak naprawdę jest to biblioteka przeznaczona do robienia tego samego, co twoje dwie linie kodu .

Biblioteka do wykonywania prostych czynności będzie również prosta. Prawdopodobnie nie sprawi Ci bólu głowy, który sugeruje twoje pytanie.

Korzystanie ze skomplikowanej biblioteki w celu zrobienia czegoś prostego prawdopodobnie oznacza, że ​​próbujesz zrobić więcej niż zaimplementować wymaganą funkcjonalność.

Takie jak wbudowane funkcje, które nie są potrzebne, przygotuj się na przyszłość, która może nigdy nie nadejść itp.

Problemem tutaj nie jest to awaria wyważać otwartych drzwi per se .


4

Jeśli nie wynalazłeś koła na nowo, najprawdopodobniej używa ono istniejącego zestawu kół dostarczonego przez dostawcę lub firmę zewnętrzną.

Jeśli jest to anty-wzorzec, zwykle nazywa się to blokowaniem dostawcy.


6
Nie wydaje mi się, żeby to było to samo. Zablokowanie dostawcy jest jednym szczególnym negatywnym skutkiem uzależnienia od rozwiązania dostawcy, niezależnie od tego, czy użycie dostawcy było opłacalne w momencie wyboru. OP częściej pyta o termin wyboru rozwiązania innej firmy, gdy koszt integracji jest wyższy niż koszt zwykłego opracowania nowego rozwiązania od zera (a zablokowanie dostawcy prawdopodobnie nawet się nie zdarza, w przypadkach, gdy taniej, aby opracować nowe rozwiązanie zamiast polegać na dostawcy).
Ben

@Ben - Ok, lubię Framework związany, a nie blokadę dostawcy. To pytanie opiera się na opiniach i była to pierwsza rzecz, która wpadła mi do głowy.
Jon Raynor,

0

Bezpieczeństwo pracy?
Wspominasz o wysiłkach związanych z utrzymywaniem synchronizacji itp. Niektórzy wolą zarządzać kodem innych ludzi niż pisać własny. Zwłaszcza menedżerowie.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.