Parametri speciali per comportamento, buona o cattiva pratica?

1

Stavo davvero chiedendo a me stesso dove chiedere questo, perché non potevo decidere da solo. Questa è più una domanda di progettazione del software.

Contesto

Attualmente gestisco un piccolo modulo Node.js su NPM, che fondamentalmente funge da wrapper API per un servizio online.

Problema

Ho una funzione nel modulo che, quando chiamata con una stringa, effettua una richiesta al servizio e riceve i dati, da una pagina, relativi a quella stringa di input.

Tuttavia, come programmatore e utente del servizio, posso capire che potrebbe essere utile ottenere i dati per tutte le possibili stringhe di input su quella pagina. Ora che ho il modulo, un programmatore che usa il mio wrapper API dovrebbe conoscere ogni stringa e chiamarla ogni volta, facendo un totale di richieste n , 1 per ogni stringa, che è inaccettabile se sto cercando di scrivere un bel wrapper API per altri sviluppatori (che io sono).

* Possibili soluzioni / Domanda *

Ho pensato a me stesso, potrei scrivere la funzione in modo che, in base alla stringa di input, se fosse un valore speciale (come null), potrei recuperare tutti i dati rilevanti, ma poi mi sono chiesto se questa è una buona pratica.

Se registro bene il caso di input speciale, è buona norma avere un parametro specifico per una funzione che produce sempre un output specifico? È meglio scrivere semplicemente un'altra funzione che esegue questa procedura? Mi sento come se avere un'altra funzione violerebbe il principio DRY perché la maggior parte del codice sarebbe la stessa nella nuova funzione.

Grazie a tutti! Questo mi ha davvero infastidito da un po 'di tempo.

    
posta CisBae 11.01.2015 - 09:20
fonte

1 risposta

0

Tutte queste sono soluzioni valide, a seconda di cosa sarebbe più intuitivo per gli utenti della tua API.

Se i tuoi utenti si aspetterebbero che getMagicData() ottenga tutti dei dati per impostazione predefinita, esegui questa operazione e consenti che accetti un argomento facoltativo per specificare un sottoinsieme di dati.

Ma se questo comportamento sorprenderebbe e confondesse i tuoi utenti, allora crea un metodo getAllMagicData() separato. Non è una violazione DRY fintanto che entrambe le funzioni condividono il codice comune (facendo un terzo metodo "privato" o avendo getAllMagicData() chiama semplicemente getMagicData() ripetutamente).

Basandomi esclusivamente sulla descrizione che hai fornito, probabilmente troverei i metodi separati più intuitivi.

    
risposta data 11.01.2015 - 11:20
fonte

Leggi altre domande sui tag