I quadri di iniezione delle dipendenze sono utili nelle lingue digitate dinamicamente?

6

Qualche tempo fa stavo indagando su framework di iniezione di dipendenza per un progetto su cui sto lavorando in Python (parte di un lavoro a tempo pieno, moderatamente grande e complesso). Ho trovato alcuni progetti come dependency_injector che sembrano interessanti ma molti di loro sembrano in qualche modo abbandonati. Gli esempi di questi progetti fanno sì che le strutture di iniezione di dipendenza utilizzino la stessa quantità di codice (o più) rispetto alla semplice messa in opera di una dipendenza tra due classi / oggetti.

Ho fatto ancora un po 'di lettura e sembra che una situazione simile sia avvenuta anche con i framework DI in Ruby; è risultato essere più facile usare le dipendenze direttamente rispetto al codice con alcuni framework.

È utile utilizzare i framework DI in lingue che vengono digitate dinamicamente? So che tali framework sono spesso usati con linguaggi tipizzati staticamente come Java o C #. Che dire dei linguaggi dinamici come Python o Ruby?

    
posta joshin4colours 29.05.2017 - 19:38
fonte

2 risposte

7

Il vantaggio principale di un framework DI è che sposta la costruzione in un linguaggio diverso (xml, json, qualunque sia). Ciò impone di non mescolare il codice di costruzione con il codice di comportamento. È un team di programmazione scadente che ha bisogno di questo, ma funziona.

DI non richiede un framework. Semplicemente non mescolare queste responsabilità è sufficiente. Anche la costruzione non deve essere eseguita proceduralmente in main. Hai il diritto di utilizzare tutte le funzionalità della lingua. Gli schemi creativi hanno fatto molta strada. È quando si mescolano l'uso e la costruzione che ci si ritrova a dipendenze hard di codifica senza possibilità di sovrascrivere.

I valori predefiniti buoni sono estremamente facili da ignorare, se necessario, in una lingua con parametri denominati. Questo ha un impatto molto più grande sulla DI e quindi sulla digitazione dinamica. DI funziona bene in linguaggi dinamici. Anche i linguaggi prototipo possono trarne beneficio. Questo perché DI è più che meccanico. In realtà rende il codice più facile da leggere, se lo stai facendo bene.

Consiglio a tutti di imparare a fare DI senza una struttura prima di tentare di valutare ciò che qualsiasi framework fornisce. Alcuni sono utili anche quando hai l'abilità di vivere senza di loro. Alcuni sono solo qualcos'altro che cerca di convincerti a diventare dipendente da questo. Usare con cautela.

    
risposta data 29.05.2017 - 20:07
fonte
5

Per me DI è una best practice che utilizzo sia in lingue digitate dinamicamente che in lingue tipizzate staticamente, per i seguenti motivi:

  1. Mi piacciono i miei moduli / funzioni / classi / qualsiasi cosa per dire esplicitamente da cosa dipendono, così qualcuno può guardare il mio modulo e dire hmm sì questo modulo dipende da un validatore o da un db o altro.
  2. Non usare DI ti fa usare trucchi specifici della lingua per falsificare oggetti, variabili, membri nei test; a volte questi trucchi funzionano bene, a volte ti danno mal di testa.
  3. Le tecniche di pulizia dei codici sono valide per qualsiasi linguaggio di programmazione
  4. Se rifattori il tuo codice ed estrai qualcosa se non lo fai, scoprirai che è più difficile, più è difficile usarlo, devi quindi guardare dentro il codice per sapere cosa sovrascrivere invece di semplicemente prendendo un modulo e fornendogli le dipendenze esternamente.
risposta data 29.05.2017 - 20:03
fonte

Leggi altre domande sui tag