Evita la programmazione di copia e incolla, quale modello usare? [chiuso]

-2

Ho un piccolo software che genera alcuni documenti di Word. Legge un modello, esegue alcune procedure SqL per ottenere i dati, genera i documenti e li invia via e-mail. È abbastanza semplice.

In questo momento voglio applicare quella logica per generare un altro tipo di rapporto, il modello di parole di base cambierà e verrà eseguita query diverse. Posso farlo (erroneamente) copiando il codice, ma voglio estendere l'app corrente per generare entrambi i rapporti.

Quello che non riesco a capire è quale modello software devo applicare per risolvere questa situazione.

    
posta cap7 27.11.2015 - 16:55
fonte

2 risposte

4

Il solito modo è di refactor la funzionalità comune nel proprio metodo o classe, e quindi chiamare quel metodo o classe da quei due punti, passando le informazioni richieste alla classe attraverso il suo metodo o costruttore parametri.

Vedi anche
Refactoring su Wikipedia

    
risposta data 27.11.2015 - 17:04
fonte
0

Per aggiungere ciò che dice @Robert, penso a questo come alla ricerca di una tecnica di parametrizzazione che permetta di scrivere il codice comune una sola volta (quindi può essere mantenuto in un posto) e poi riutilizzato invece di incollare.

Tuttavia, è necessario determinare il tipo di parametrizzazione che consente di scrivere la parte comune da scrivere una sola volta.

Spesso i parametri di funzione sono sufficienti, ma questo non è l'unico approccio.

Ci sono anche classi e metodi come dice @Robert. A volte utilizziamo le sostituzioni e / o le interfacce: penso alle sostituzioni e alle interfacce come una forma di parametrizzazione: l'uso della classe base o dell'interfaccia serve per esprimere un fascio di parametri formali e la sottoclasse concreta o l'implementazione dell'interfaccia serve al binding del bundle di effettivo i parametri.

Non dimenticare che in molte lingue (anche funzionali) possiamo avere funzioni di ordine superiore, il che significa che le funzioni possono assumere parametri che si riferiscono a funzioni, il che abilita altri casi d'uso. I metodi astratti e di interfaccia agiscono molto come i parametri di funzione, forse con un po 'più di struttura.

Un altro strumento fornito da alcune lingue è di tipo generico. A volte il codice comune non può essere espresso con parametri normali: ciò che differisce tra gli scenari è il tipo su cui si opera, anche se il codice è lo stesso in ogni caso. In quelle situazioni l'aiuto dei generici.

È possibile discutere alcuni pattern di progettazione in termini di parametrizzazione, come un pattern Observer e Visitor, che astrae la struttura di dati specifica o il suo attraversamento da un'azione da eseguire. Questi possono essere implementati con le tecniche OOP (utilizzando le sostituzioni o le interfacce) e anche con le funzioni di ordine superiore.

E tuttavia, altre tecniche (monadi) consentono di raccogliere altri tipi di codice comune in modo tale da essere scritti una sola volta. Sono in corso ricerche su altri tipi di parametrizzazione.

In generale, tuttavia, penso che si possa creare un collegamento mentale di molte delle tecniche per ridurre il codice copiato (incollato) alle variazioni sulla parametrizzazione.

    
risposta data 27.11.2015 - 17:29
fonte

Leggi altre domande sui tag