Quando utilizzare la generazione del codice su una programmazione flessibile

4

dove lavoro attualmente, c'è una squadra che usa la generazione del codice per generare leggere variazioni di un programma. Trovo questo un po 'imbarazzante. Posso immaginare di usare generatori di codice che producono codice complesso per cose utilizzabili in diversi progetti, ma usare un generatore di codice solo per le variazioni di un programma esistente mi sembra eccessivo.

Credo che la generazione del codice non sia una buona soluzione per questo, perché crei molte versioni di un certo programma che ai miei occhi è difficile da mantenere. Credo che dovresti provare a utilizzare la programmazione orientata agli oggetti (o un altro paradigma) per rendere flessibile un programma in modo che possa gestire tutte le variazioni richieste di cui hai bisogno. In questo modo hai solo una versione da mantenere.

Mi stavo chiedendo cosa ne pensi? Quando si utilizza un generatore di codice veramente utile? Sempre? O solo per cose complesse?

Spero di sentire dei bei pensieri a riguardo, perché a me sembra un tale eccessivo.

Grazie!

    
posta Zavulon 16.02.2018 - 10:48
fonte

3 risposte

3

Generazione di codice non è male di per sé. Dopo tutto quello che fanno i compilatori. C # è cattivo perché è un generatore di codice per IL?

Quello che è sbagliato è che la generazione del codice richiede la propria lingua o configurazione per farlo funzionare.

Se stai programmando in un linguaggio di generazione di codice, compilando 'code' e ricompilando nuovamente in 'codice eseguibile' hai un intero passaggio in più e potenzialmente un nuovo linguaggio non supportato da affrontare.

Se quel passo in più è ben supportato e comunemente usato, probabilmente stai bene. Se è un insieme di script di PowerShell accartocciati dal piano di sotto ha scritto come un lavoro in giro per un problema interno nella vostra azienda. Bene, ha dei rischi extra.

    
risposta data 16.02.2018 - 11:10
fonte
3

I believe you should ... make one program flexible so it can handle all the required variations you need

Come hai intenzione di testarlo? Inserisci termini grezzi, ogni volta che aggiungi un "interruttore funzione", raddoppi il numero di test necessari per eseguire i test di regressione ogni volta che apporti una modifica. Questo può essere un costoso mal di testa di manutenzione.

Al contrario, se si hanno più applicazioni specifiche per le funzionalità e quindi offrono poca o nessuna flessibilità, quando si cambia una di esse, è necessario eseguire solo alcuni test solo su quella applicazione.

Al contrario, molte applicazioni specifiche per le funzionalità possono essere un incubo per le vendite: "caro cliente, dedica due ore alla compilazione del nostro sondaggio di 500 domande, così possiamo scegliere l'app corretta dal nostro pool di oltre mille applicazioni personalizzate per il tuo esigenze". No grazie. Dammi solo una soluzione generica e poi configurala per le mie esigenze.

Nessuna è la soluzione corretta. Ognuno ha pro e contro. Quindi se il tuo team sta usando la generazione di codice per creare piccole variazioni di un'applicazione e funziona, allora è grandioso. Insisti. Se è un vero problema, allora forse ha bisogno di essere cambiato. Cosa pensa il resto della squadra? Cosa pensano i tester? I saldi? Clienti? Avere un problema con esso potrebbe significare che il problema è con te, non il processo di generazione del codice. Se anche gli altri hanno un problema, allora le cose devono cambiare.

    
risposta data 16.02.2018 - 11:12
fonte
2

La domanda di base che devi porsi è: cosa manterrai?

Supportare il codice generato è un incubo, ma non supportare gli script (codice) generatori di codice. Cosa succede se trovi un bug in una delle applicazioni? Hai bisogno di passare attraverso una pila di codice generato per risolverlo in tutte le tue diverse applicazioni o lo aggiusti in un posto e solo rigenerare il codice per tutte le applicazioni?

In qualche modo di astrazione o di un altro ogni programmatore scrive software di generazione del codice ed è proprio ciò che è necessario supportare. Scrivo in un linguaggio di alto livello ma non supporto la manutenzione a livello di assembly.

Quindi per rispondere alla tua domanda: un generatore di codice è utile se non devi fare manutenzione sul codice generato.

    
risposta data 16.02.2018 - 15:06
fonte

Leggi altre domande sui tag