Ho fatto parte dell'organizzazione in cui lavoro da un anno e mezzo circa. La società scrive fondamentalmente il codice Perl e ha una grande quantità di codice legacy che in origine impediva alla società di andare avanti con eventuali modifiche al codice. La mia prima osservazione con il codice esistente era la non esistenza di Modularity.
Nel corso del tempo in cui ho lavorato qui, con l'aiuto di alcuni (che hanno lasciato l'azienda), ho fatto un sacco di hardwork Modularizzando tutte le sezioni principali dell'applicazione. Credo che ora abbiamo circa il 70% dei sistemi di base modulari, coerenti e stratificati. A questo punto sono accusato di complicare la progettazione del sistema e tutto ciò che cerco di fare è guardato con sospetto.
Per progettare questi sistemi ho applicato tutti i migliori approcci (modelli) e metodologie di progettazione (SOLID) disponibili o noti a me. Quando l'ho scritto, è stato tutto apprezzato ma ora gli sviluppatori vogliono tornare a quello che credono come metodologie più semplici (che fondamentalmente implica avere grandi classi singole, fare centinaia di cose). Continuo a non credere che questi approcci in realtà porteranno a un design più semplice, ma nessuno è in realtà pronto ad ascoltare.
Per fare un esempio, il nostro codice carica un sacco di file durante la sua vita. Tradizionalmente, la classe ha gestito molte cose come caricare il file, controllare ripetutamente se il file è stato modificato, è la versione corretta del file caricato ecc. Carichiamo anche un set diverso di file per i casi di test per assicurarci che funzioni correttamente. Tutto ciò è stato fatto in modo molto poco organizzato prima. Ognuno ha creato la propria versione del file. C'erano molte versioni di questi file e non erano gestibili. Ho introdotto un sottosistema che ti caricherà il file giusto (esegui le verifiche di versione) con un nome e una configurazione che diranno tutte le versioni del file disponibili. Alla fine ha assicurato che solo due o tre versioni dei file sono utilizzate in tutti i casi di test. Segue fondamentalmente un modello di facciata e di fabbrica in cui il caricatore creerà l'oggetto file giusto, che avrà un'interfaccia per caricare, salvare e dovrebbe_reload. Alla fine è stato persino usato per caricare contenuti da CouchDB in quanto rappresentano solo un documento. Questo è troppo complicato per gli sviluppatori e nessuno legge realmente il codice o la documentazione che ho scritto. Sono d'accordo sul fatto che tornare al nostro vecchio sistema rimuoverà un sottosistema ma ripristinerà il problema di un numero di file non gestibile.
In questo frangente mi trovo piuttosto insicuro di tutte le cose che ho imparato. Non mi trovo davvero interessato a suggerire miglioramenti, perché la mia soluzione sarà solo accusata di essere troppo complicata.
Cosa pensi che io possa fare in questo momento?