Recentemente ho sviluppato la mia API e con questo interesse investito nel design dell'API sono stato strongmente interessato a migliorare la mia progettazione dell'API.
Un aspetto che è emerso un paio di volte è (non dagli utenti della mia API ma nella mia discussione sull'argomento): si dovrebbe sapere solo guardando il codice che chiama l'API che cosa sta facendo .
Per esempio vedi questa discussione su GitHub per il discorso repo, va qualcosa come:
foo.update_pinned(true, true);
Solo guardando il codice (senza conoscere i nomi dei parametri, la documentazione, ecc.) non si può indovinare cosa farà - cosa significa il secondo argomento? Il miglioramento suggerito è di avere qualcosa come:
foo.pin()
foo.unpin()
foo.pin_globally()
E ciò chiarisce le cose (il secondo argomento era decidere se pin foo globalmente, sto indovinando), e sono d'accordo in questo caso il più tardi sarebbe sicuramente un miglioramento.
Tuttavia, credo che possano esserci casi in cui i metodi per impostare uno stato diverso ma logicamente correlato potrebbero essere meglio esposti come una chiamata al metodo piuttosto che separata, anche se non si saprebbe cosa sta facendo semplicemente guardando il codice . (Quindi dovresti ricorrere ai nomi dei parametri e alla documentazione per scoprirlo - cosa che personalmente farei sempre, non importa se non ho familiarità con un'API).
Ad esempio espongo un metodo SetVisibility(bool, string, bool)
su un FalconPeer e riconosco solo guardando la linea:
falconPeer.SetVisibility(true, "aerw3", true);
Non avresti idea di cosa stia facendo. Sta impostando 3 valori diversi che controllano la "visibilità" di falconPeer
in senso logico: accetta richieste di join, solo con password e rispondi alle richieste di scoperta. Dividere questo in 3 chiamate al metodo potrebbe portare un utente dell'API a impostare un aspetto della "visibilità" dimenticando di impostare altri che li costringono a riflettere solo esponendo l'unico metodo per impostare tutti gli aspetti della "visibilità" ". Inoltre, quando l'utente vuole cambiare un aspetto, quasi sempre vorrebbe cambiare un altro aspetto e ora può farlo in una sola chiamata.