Come si valuta il tradeoff tra robustezza e codice "pigro" nella progettazione dell'API?

6

La legge di Postel:

Be conservative in what you do, be liberal in what you accept from others.

Codice "pigro" (per The Pragmatic Programmer):

Be strict in what you will accept before you begin, and promise as little as possible in return.

Sto sviluppando un framework finanziario (asset pricing, ecc.) per Python. Domanda: quando si progetta l'API per il framework, quali fattori dovrei prendere in considerazione quando valuto il compromesso tra essere severi e liberali: input?

Esempio:

Ho il seguente metodo che scarica i prezzi delle azioni da Yahoo.

def historical_prices(ticker, start=None, end=None, data='d', convert=True):
# Do stuff

Per gli argomenti della data ( start & end ), potrei:

  • Sii severo e consenti solo una stringa di formato ISO YYYY-mm-gg, o
  • Sii liberale e accetta oggetti datetime, stringhe (di formati specificati), ecc.
posta MikeRand 30.07.2012 - 16:08
fonte

3 risposte

6

Sarà più semplice accettare l'input rigoroso e rifiutare qualsiasi altro modulo, perché dovrai considerare solo un caso.

Dipende davvero dalle esigenze dei tuoi clienti. Hanno bisogno di flessibilità di input, ad esempio l'internazionalizzazione, o possono lavorare comodamente con un unico formato.

    
risposta data 30.07.2012 - 17:02
fonte
5

Sii severo in ciò che accetti. Essere liberale in ciò che accetti e essere rigoroso su ciò che ritorni, è basato su un mondo di agenti indipendenti, ad esempio server SMTP. Se un server di posta ti invia un'email difettosa e puoi salvarla, è meglio di un errore criptico per il mittente della posta.

Tuttavia, quando stai progettando un'API da utilizzare da altri programmatori, è una storia diversa. Ricevono feedback immediati quando forniscono input errati. L'altra opzione per indovinare cosa significano è molto pericolosa. Se accetti 14-12 come dicembre quattordicesimo e 14-10 ottobre quattordici, che cosa farà il tuo programma con 10-12? Meglio essere severi ed errori con uno di essi, in questo modo il tuo programma si comporterà in modo prevedibile, che è molto più importante di essere in grado di accettare tutto.

    
risposta data 30.07.2012 - 22:05
fonte
-1

Vorrei codificare la funzione principale con un formato specifico come input. Se è presente una richiesta per aggiungere altri formati, ecc, creare una funzione per sovraccaricare il nome che converte l'oggetto data ecc nel formato prima di chiamare la funzione principale.

    
risposta data 30.07.2012 - 16:55
fonte

Leggi altre domande sui tag