Questa operazione è ASCIUTTA troppo lontano? [duplicare]

1

Un collega e io stiamo lavorando insieme su un'app Meteor.

Uno di noi pensa che il seguente codice in due punti dovrebbe essere racchiuso in una funzione per evitare la duplicazione - l'altro pensa che porti a un'inutilità / complessità non necessarie.

Non ti dirò quale sono io, perché vorrei che le risposte fossero imparziali:).

Non siamo d'accordo su questo particolare punto e vorremmo che un aiuto giungesse a una conclusione vantaggiosa per il nostro codebase.

Un file ha:

Email.send({
    from: sender,
    to: recipient,
    subject: "Message from our company",
    message: message
});

Un altro file ha lo stesso codice:

Email.send({
    from: sender,
    to: recipient,
    subject: "Message from our company",
    message: message
});

Si prega di mantenere i vostri commenti rispettosi.

Domanda: Questo codice dovrebbe essere estratto in una funzione?

Chiarimento / Modifica : il "Messaggio della nostra azienda" è uguale in entrambe le chiamate Email.send .

    
posta Nathan Lippi 21.09.2015 - 19:34
fonte

5 risposte

17

Dipende.

Supponendo che il subject (e non il mittente , per esempio) sia l'unico parametro "ripetuto" qui, vorrei rivolgere la domanda a te: Se il soggetto il testo cambia in un posto, cambia necessariamente in entrambi?

DRY non significa tanto eliminare l'importo che copi + incolla. In realtà è abbastanza facile da copiare e incollare! Ciò che intendiamo evitare è il tipico fallout di un evento di copia-incolla: N > 1 linee di codice che devono essere mantenute in perfetto unisono.

    
risposta data 21.09.2015 - 19:43
fonte
6

Vorrei almeno che la costante di stringa "Message from our company" consolidata in un unico punto. Se questo è standard boilerplate, allora un po 'di UI / copy editor vorrà cambiarlo a un certo punto e vorrebbe che fosse coerente nell'app.

    
risposta data 21.09.2015 - 20:54
fonte
6

Non penso che evitare la duplicazione del "codice" sia davvero la ragione per cui dovresti metterlo in un'altra funzione, ma perché questo "requisito" è una duplicazione.

Qualcuno sta per dire che non vogliamo più inviare una email in questo caso, ma inviare qualcos'altro come un post di Facebook. Questo dipende dal motivo per cui hai questo in due posti di codice per cominciare. Potresti farlo in due punti per due motivi completamente diversi.

Solo perché due linee di codice fanno la stessa cosa non significa che lo facciano per lo stesso motivo. Se i requisiti indicano che queste due cose dovrebbero essere sempre le stesse, inserirle nella stessa funzione.

    
risposta data 21.09.2015 - 22:28
fonte
1

In generale, lo scopo di DRY è evitare la logica dell'applicazione ripetuta. Non vedo alcuna logica di applicazione ripetuta qui. Email.send è già un metodo riutilizzabile di alto livello.

Un approccio potrebbe essere l'uso di una costante come soggetto.

    
risposta data 21.09.2015 - 19:53
fonte
0

Se sono solo questi due punti nel codice, non penso che faccia molta differenza.

Ma nella maggior parte dei progetti su cui ho lavorato, l'invio di posta raramente solo invio di posta. Spesso comporta anche l'aggiunta di intestazioni, l'unione con i modelli, la generazione di ID univoci, l'aggiunta di collegamenti di annullamento dell'iscrizione e la registrazione del messaggio nel database. In questi casi, tutti i tentativi di invio della posta vengono inviati in una singola funzione che gestisce tali attività.

Quindi, se ti aspetti che il sistema invii email da più posti, o se ti aspetti che alla fine abbia bisogno di "fantasticare" sulle e-mail che vengono inviate, sì, lo avvolgerei nella sua funzione.

    
risposta data 21.09.2015 - 23:18
fonte

Leggi altre domande sui tag