Ci sono motivi per non utilizzare un framework DI su un progetto standalone?

6

Durante la ricerca di tecnologie per un nuovo "progetto per animali domestici" ho analizzato il codice sorgente di qualche progetto ben noto e ho notato che utilizzano a malapena qualsiasi quadro di iniezione delle dipendenze. Ad esempio, Hazelcast e Cassandra non sembrano usarne nessuno. L'unico grande nome che ho trovato e che sembra utilizzarne uno è Elasticsearch. Mi chiedo perché questo tipo di framework non venga utilizzato in progetti "server" grandi e autonomi. È per motivi di prestazioni? Serve ad evitare il codice di accoppiamento per un particolare framework? Quando è possibile utilizzare tali strutture diventare pericolosi?

    
posta Tony E. Stark 21.03.2016 - 11:41
fonte

2 risposte

14

Ecco l'unica iniezione di dipendenza di cui avrai mai bisogno:

public MyConstructorMethod(MyDependencies) { }

Semplice, non è vero?

Allora perché hanno i contenitori DI? Bene, preferiresti dire questo

var svc = new ShippingService(new ProductLocator(), 
   new PricingService(), new InventoryService(), 
   new TrackingRepository(new ConfigProvider()), 
   new Logger(new EmailLogger(new ConfigProvider())));

o questo?

var svc = IoC.Resolve<IShippingService>();

Certo, questa è una semplificazione eccessiva. I contenitori DI gestiscono un certo tipo di complessità, ma aggiungono alcune nuove complessità. Nell'esempio 2, come fai a sapere cosa viene iniettato se hai un problema che devi risolvere? Inoltre, se le tue dipendenze sono complicate come l'esempio 1, probabilmente dovresti affrontare prima tale complessità.

A mio parere, i contenitori DI si dimostrano validi in applicazioni che presentano grafici di oggetti molto grandi e complessi. Questo potrebbe spiegare perché non li vedi in strutture di piccole e medie dimensioni.

Ulteriori letture
Inversion of Control Containers e il pattern In Dependency Injection
Perché ho bisogno di un contenitore IoC invece del codice DI semplice?

    
risposta data 21.03.2016 - 14:35
fonte
7

Sì, complessità. Un framework DI rende il codice più complesso e la complessità rende il codice più soggetto a errori e più costoso da mantenere. Ma su un sistema sufficientemente complesso, un framework DI semplifica la gestione delle dipendenze e il test dell'unità, che a sua volta lo rende più facile da mantenere. Quindi è sempre una questione di compromessi e determinare a che punto i benefici dell'aggiunta di un framework DI superano i costi. Questo non è sempre facile da determinare.

Non direi che un framework DI può essere pericoloso . Anche nei casi in cui è eccessivo, per lo più sarà solo un trascinamento, ma non affonderà il progetto. Solo se è un sintomo di una tendenza generale a sovraccaricare tutto, diventa un pericolo.

    
risposta data 21.03.2016 - 17:04
fonte

Leggi altre domande sui tag