Cercherò di scoprire perché il CIO potrebbe non essere buono dal mio punto di vista.
Come per tutto il resto, il contenitore IOC (o come direbbe Einstein I = OC ^ 2) è un concetto che devi decidere tu stesso se ne hai bisogno o meno nel tuo codice. La recente protesta della moda per il CIO è solo questo, la moda. Non innamorarti della moda, questo è il primo. Ci sono miriadi di concetti là fuori che potresti implementare nel tuo codice. Prima di tutto, sto usando l'iniezione di dipendenza da quando ho iniziato a programmare e ho imparato il termine stesso quando è stato reso popolare con quel nome. Il controllo delle dipendenze è un argomento molto vecchio ed è stato affrontato finora in migliaia di miliardi di modi, a seconda di cosa si stava disaccoppiando da cosa. Il disaccoppiamento di tutto da tutto è una sciocchezza. Il problema con il contenitore IOC è che cerca di essere utile come Entity Framework o NHibernate. Mentre scrivere un mappatore relazionale ad oggetto è semplicemente un must non appena si deve accoppiare qualsiasi database con il proprio sistema, il contenitore IOC non è sempre necessario. Quindi, quando il contenitore IOC è utile:
- Quando hai una situazione con molte dipendenze che vuoi organizzare
- Quando non ti interessa accoppiare il codice con prodotti di terze parti
- Quando i tuoi sviluppatori vogliono imparare a lavorare con un nuovo strumento
1: Non è così frequente che tu abbia così tante dipendenze nel tuo codice o che tu ne sia consapevole all'inizio del progetto. Il pensiero astratto è utile quando è necessario il pensiero astratto.
2: L'accoppiamento del codice con codice di terze parti è un problema di HuGe. Stavo lavorando con un codice che ha più di 10 anni e che seguiva a quel tempo concetti sofisticati e avanzati ATL, COM, COM + e così via. Non c'è niente che tu possa fare con quel codice ora. Quello che sto dicendo è che un concetto avanzato offre un vantaggio apparente, ma questo viene annullato a lungo termine con lo stesso vantaggio obsoleto. Aveva appena reso tutto più costoso.
3: Lo sviluppo del software è abbastanza difficile. Puoi estenderlo a livelli irriconoscibili se consenti ad alcuni concetti avanzati di ritagliarsi nel tuo codice. Si è verificato un problema con IOC2. Sebbene stia disaccoppiando le dipendenze, sta anche disaccoppiando il flusso logico. Immagina di aver trovato un bug e di dover fare una pausa per esaminare la situazione. IOC2, come qualsiasi altro concetto avanzato, lo sta rendendo più difficile. Risolvere un bug all'interno di un concetto è più difficile che correggere un bug in un codice più semplice, perché quando si corregge un bug è necessario obbedire nuovamente a un concetto. (Solo per darvi un esempio, C ++ .NET modifica costantemente la sintassi così tanto che è necessario riflettere attentamente prima di refactificare una versione precedente di .NET.) Qual è il problema con IOC? Il problema è nella risoluzione delle dipendenze. La logica per la risoluzione è comunemente nascosta nello stesso IOC2, scritto forse in modo insolito che devi imparare e mantenere. Il tuo prodotto di terze parti sarà presente tra 5 anni? Microsoft non lo era.
La sindrome "Sappiamo come" è scritta dappertutto per quanto riguarda IOC2. Questo è simile ai test di automazione. Fantasioso termine e soluzione perfetta a prima vista, devi semplicemente eseguire tutti i test per eseguire tutta la notte e vedere i risultati al mattino. È davvero doloroso spiegare a società dopo società cosa significano realmente i test automatizzati. I test automatici non sono sicuramente un modo rapido per ridurre il numero di bug che è possibile introdurre durante la notte per aumentare la qualità del prodotto. Ma la moda sta rendendo questa nozione fastidiosamente dominante. IOC2 soffre della stessa sindrome. Si ritiene che sia necessario implementarlo affinché il software sia valido. Ogni recente intervista mi è stato chiesto se sto implementando IOC2 e automazione. Questo è un segno di moda: la società aveva una parte del codice scritto in MFC che non abbandonerà.
Devi imparare IOC2 come qualsiasi altro concetto nel software. La decisione sulla necessità di utilizzare IOC2 è all'interno del team e dell'azienda. Tuttavia, almeno TUTTI i suddetti argomenti devono essere menzionati prima che la decisione venga presa. Solo se vedi che il lato positivo supera il lato negativo, puoi prendere una decisione positiva.
Non c'è nulla di sbagliato in IOC2 tranne che risolve solo i problemi che risolve e introduce i problemi che introduce. Nient'altro. Tuttavia, andare contro la moda è molto difficile, hanno la bocca sudata, i seguaci di tutto. È strano come nessuno di loro sia lì quando il problema con la loro fantasia diventa evidente. Molti concetti nell'industria del software sono stati difesi perché creano profitti, sono scritti libri, conferenze tenute, nuovi prodotti realizzati. Questa è la moda, di solito di breve durata. Non appena le persone trovano qualcos'altro, lo abbandonano completamente. IOC2 è utile ma mostra gli stessi segni di molti altri concetti scomparsi che ho visto. Non so se sopravviverà. Non esiste una regola per questo. Pensi che se è utile, sopravviverà. No, non va così. Una grande azienda ricca è sufficiente e il concetto può morire in poche settimane. Vedremo. NHibernate è sopravvissuto, EF è arrivato secondo. Forse sopravviverà anche IOC2. Non dimenticare che la maggior parte dei concetti nello sviluppo di software non riguarda nulla di speciale, sono molto logici, semplici ed evidenti, e talvolta è più difficile ricordare l'attuale convenzione di denominazione che comprendere il concetto stesso. La conoscenza di IOC2 rende uno sviluppatore uno sviluppatore migliore? No, perché se uno sviluppatore non è stato in grado di elaborare un concetto simile in natura a IOC2, allora sarà difficile per lui o lei capire quale problema IOC2 sta risolvendo, usarlo sembrerà artificiale e potrebbe iniziare a usarlo per essere una specie di politicamente corretto. Non dimenticare che la maggior parte dei concetti nello sviluppo di software non riguarda nulla di speciale, sono molto logici, semplici ed evidenti, e talvolta è più difficile ricordare l'attuale convenzione di denominazione che comprendere il concetto stesso. La conoscenza di IOC2 rende uno sviluppatore uno sviluppatore migliore? No, perché se uno sviluppatore non è stato in grado di elaborare un concetto simile in natura a IOC2, allora sarà difficile per lui o lei capire quale problema IOC2 sta risolvendo, usarlo sembrerà artificiale e potrebbe iniziare a usarlo per essere una specie di politicamente corretto. Non dimenticare che la maggior parte dei concetti nello sviluppo di software non riguarda nulla di speciale, sono molto logici, semplici ed evidenti, e talvolta è più difficile ricordare l'attuale convenzione di denominazione che comprendere il concetto stesso. La conoscenza di IOC2 rende uno sviluppatore uno sviluppatore migliore? No, perché se uno sviluppatore non è stato in grado di elaborare un concetto simile in natura a IOC2, allora sarà difficile per lui o lei capire quale problema IOC2 sta risolvendo, usarlo sembrerà artificiale e potrebbe iniziare a usarlo per essere una specie di politicamente corretto. La conoscenza di IOC2 rende uno sviluppatore uno sviluppatore migliore? No, perché se uno sviluppatore non è stato in grado di elaborare un concetto simile in natura a IOC2, allora sarà difficile per lui o lei capire quale problema IOC2 sta risolvendo, usarlo sembrerà artificiale e potrebbe iniziare a usarlo per essere una specie di politicamente corretto. La conoscenza di IOC2 rende uno sviluppatore uno sviluppatore migliore? No, perché se uno sviluppatore non è stato in grado di elaborare un concetto simile in natura a IOC2, allora sarà difficile per lui o lei capire quale problema IOC2 sta risolvendo, usarlo sembrerà artificiale e potrebbe iniziare a usarlo per essere una specie di politicamente corretto.