Come si chiama l'antipattern opposto a "reinventare la ruota"? [chiuso]

101

L'antipattern " Reinvent the wheel " è piuttosto comune - invece di usare una soluzione pronta, scrivi il tuo da zero. La base di codice cresce inutilmente, interfacce leggermente diverse che fanno la stessa cosa ma leggermente abbondano in modo diverso, il tempo è sprecato per scrivere (e fare il debug!) Funzioni che sono prontamente disponibili. Lo sappiamo tutti.

Ma c'è qualcosa all'estremità opposta dello spettro. Quando invece di scrivere la tua funzione è composta da due righe di codice, puoi importare un framework / API / libreria, istanziarlo, configurarlo, convertire il contesto in datatype come accettabile dal framework, quindi chiamare una singola funzione che fa esattamente ciò di cui hai bisogno, due linee di business logic sotto un gigabyte di livelli di astrazione. E poi è necessario mantenere la libreria aggiornata, gestire le dipendenze di build, mantenere sincronizzate le licenze e il codice di istanziazione di esso è dieci volte più lungo e più complesso di se si "reinventa la ruota".

Le ragioni possono essere varie: gestione strettamente opposta alla "reinvenzione della ruota" a prescindere dal costo, qualcuno che spinge la propria tecnologia preferita nonostante una marginale sovrapposizione con i requisiti, un ruolo in declino di un precedente modulo principale del sistema, o aspettativa di espansione e un uso più ampio del framework, che non arriva mai, o semplicemente fraintendendo il "peso", un paio di istruzioni di importazione / inclusione / caricamento portano "dietro le quinte".

Esiste un nome comune per questo tipo di antipattern?

(Non sto tentando di avviare una discussione quando è giusto o sbagliato, o se è un vero antipattern o qualsiasi opinion based , questa è una semplice e semplice domanda di nomenclatura. )

Modifica: il "duplicato" suggerito parla del proprio codice per renderlo "pronto per tutto", completamente separato dai sistemi esterni. Questa cosa potrebbe in alcuni casi derivare da esso, ma in generale deriva da "avversione a reinventare la ruota" - riutilizzo del codice a tutti i costi; se esiste una soluzione "pronta all'uso" del nostro problema, noi lo useremo, indipendentemente da quanto male si adatti e dal costo che ne deriva. Favorire dogmaticamente la creazione di nuove dipendenze rispetto alla duplicazione del codice, con totale disprezzo per i costi di integrazione e manutenzione di queste dipendenze rispetto al costo di creazione e manutenzione del nuovo codice.

    
posta SF. 18.04.2017 - 16:51
fonte

11 risposte

9

No. Non esiste un nome anti-pattern comunemente usato che copra ciò che stai descrivendo.

    
risposta data 19.04.2017 - 12:29
fonte
50

Golden Hammer

Il martello d'oro è uno strumento scelto solo perché è elegante. Non è né efficiente in termini di costi né efficiente nello svolgimento dell'attività prevista.

fonte: xkcd 801

(Nonostante i voti negativi, rispondo a questa risposta: potrebbe non essere esattamente l'opposto di reinventare la ruota semanticamente, ma si adatta ad ogni esempio menzionato nella domanda)

    
risposta data 19.04.2017 - 06:01
fonte
34

Robert Martin usa il termine " Framework " per riferirsi al la più ovvia conseguenza negativa di questo anti-pattern. Poiché non penso che ci sia un nome comune per il modello stesso, un riferimento a questa conseguenza potrebbe essere sufficiente per la maggior parte degli scopi.

    
risposta data 18.04.2017 - 22:22
fonte
18

Questa pagina di wikipedia su " Invented Here " descrive una situazione leggermente diversa ma molto simile risultati finali. Descrive l'avversione di una squadra verso la creazione del proprio codice quando è possibile trovare funzionalità equivalenti là fuori.

Direi che il nome è un po 'fuorviante. Rende sensato quando messo in contesto con il suo opposto Non inventato qui che IMHO è praticamente un sinonimo per Reinventare la ruota.

    
risposta data 18.04.2017 - 22:38
fonte
13

Ho sentito " Compra Versus Build "e" Inventati qui "come nomi anti-modello per un pregiudizio contro lo sviluppo di cose in-house, anche quando può avere senso farlo. (E anche se la frase "comprare contro build" dovrebbe indicare una scelta tra alternative valide, trovo che di solito è menzionato quando qualcuno crede che "comprare" sia la scelta giusta.)

    
risposta data 19.04.2017 - 01:02
fonte
9

Do not use a cannon to kill a mosquito

Confucius

AKA Overkill

    
risposta data 19.04.2017 - 06:07
fonte
8

Bloat è un termine generico, ma può includere ciò che descrivi. Il nostro software diventa eccessivamente complesso (gonfiato) a causa di tutte le ulteriori trasformazioni e astrazioni richieste, e sia la complessità che le dipendenze stesse contribuiscono a prestazioni inferiori / minore efficienza e maggiore consumo di risorse (disco, larghezza di banda).

Se lo desideriamo, potremmo chiarire con un termine come dipendenze gonfiate .

    
risposta data 19.04.2017 - 00:43
fonte
5

Penso che Usare un martello per rompere un dado sia piuttosto vicino. È qualcosa che è possibile, ma ha bisogno di una quantità smisurata di lavoro per rompere un pazzo in quel modo, senza che si verifichino numerosi effetti collaterali indesiderati. (E c'è un sacco di noci da crackare ...)

La frase ha anche il vantaggio di non utilizzare il gergo informatico, quindi potrebbe essere molto utile per dare un indizio a qualcuno che non ne ha.

A proposito, c'è una distinzione da disegnare con hell inferenza . Se qualcuno ha già avvolto tutte le complessità all'interno di un incapsulamento che crea interfacce semplici, chiare e facili da usare, e prevede che la penalità nei cicli della CPU o nell'uso della memoria non sia eccessiva e che sia improbabile che la futura modifica del codice incapsulato sia necessario, quindi un argomento rimanente contro l'utilizzo è l'inferno di dipendenza che potrebbe causare.

    
risposta data 19.04.2017 - 14:14
fonte
5

Non penso che esista un analogo esatto, ma direi che overdesign o overengineering si avvicinano di più

Almeno, direi che questo è ciò che realmente sta succedendo quando ho incontrato qualcosa di simile a ciò che descrivi.

L'uso di una libreria invece di scrivere il tuo codice per implementare la stessa funzionalità non è quasi mai dannoso.

Anche nel tuo ipotetico esempio, l'uso di una libreria per sostituire "due righe di codice" potrebbe non essere necessario, ma è improbabile che ti causi molto dolore - se è davvero una biblioteca pensata per fare la stessa cosa dei tuoi due linee di codice.

Anche una biblioteca per fare una cosa semplice sarà semplice. Non è probabile che ti dia il mal di testa che la tua domanda implica.

Utilizzare una libreria complicata per fare qualcosa di semplice implica probabilmente che stai cercando di fare di più che implementare la funzionalità richiesta.

Ad esempio costruire in funzioni che non sono necessarie, preparare un futuro che potrebbe non arrivare mai, ecc.

Il problema qui non è in realtà il fallimento di reinventare la ruota di per sé .

    
risposta data 19.04.2017 - 13:25
fonte
4

Se non hai re-inventato la ruota, molto probabilmente uno usa un set di ruote esistente fornito da un venditore o da una terza parte.

Se si tratta di un anti-pattern, di solito viene chiamato lock-in del fornitore.

    
risposta data 18.04.2017 - 20:31
fonte
0

Sicurezza lavoro? Lei cita tutti gli sforzi per mantenere sincronizzati gli elementi, ecc. Alcune persone preferiscono gestire il codice di altre persone piuttosto che scrivere le proprie. Manager, in particolare.

    
risposta data 19.04.2017 - 17:54
fonte

Leggi altre domande sui tag