Usa variabili globali o metodi nel frontend di una API

0

Attualmente sto progettando una libreria grafica in Java e ora è arrivato il frontend che mi incuriosisce perché non ho mai visto librerie che usano variabili globali per le loro impostazioni / proprietà - in effetti alcuni fanno di tutto per proteggerle come le librerie JavaScript e, naturalmente, scegliere di usare getter e setter come:

Viewport.VSyncEnabled(true)

invece di semplicemente

Viewport.VSyncEnabled = true;

Suppongo che sia per far sapere alla biblioteca cosa sta succedendo, ma ci sono così tante variabili che semplicemente non hanno bisogno di monitoraggio come i dati di debug di output.
Mi piacerebbe davvero usare le variabili globali, ma se è molto contro la convenzione e ci sono dei benefici (che non conosco adesso), allora sarò felice di usare i metodi. La mia ragione per voler utilizzare le variabili globali è, invece, secondo i miei benchmark, che è più veloce accedere direttamente in questo modo.

    
posta 19.02.2014 - 02:03
fonte

1 risposta

3

Sì, ovviamente assegnare direttamente una variabile è più veloce che chiamare un metodo. Tuttavia, ci sono buone ragioni per cui l'utilizzo di un metodo è migliore.

  1. Il principio di accesso uniforme dice che tutti i dati di un oggetto (o qui: libreria) dovrebbe essere accessibile tramite la stessa interfaccia. Questo sarebbe violato se alcune proprietà potessero essere impostate direttamente, e altre potrebbero essere impostate solo tramite metodi. Almeno alcune proprietà useranno i metodi, a causa di ...

  2. Validation . Può darsi che alcune variabili di configurazione abbiano il tipo int , ma forse accetta solo valori >= 0 . Con una variabile public , non c'è modo di verificarlo. Con un metodo, possiamo eseguire una convalida arbitraria.

    Ovviamente, questo non si applica ai campi final . Rendere pubbliche le costanti non è un problema, tranne forse per gli altri due motivi qui. Dipende da come vengono utilizzati.

  3. incapsulamento è importante. Se la nostra API pubblica è composta da variabili, non possiamo mai rimuoverle senza compromettere la compatibilità con le versioni precedenti. Ciò influisce sul funzionamento interno della nostra biblioteca. Quando utilizziamo i metodi per impostare / ottenere valori, possiamo rielaborare i componenti interni della nostra libreria senza dover modificare l'API pubblica. Ad esempio, eseguire qualche hook quando una proprietà è stata impostata non è un problema con i metodi.

Insieme, questi sono tre buoni motivi per usare i metodi. È molto più flessibile e molto più pulito ed estensibile dell'alternativa.

C'è un altro problema con le variabili globali, o più precisamente con globale : possiamo avere una sola "istanza" della tua libreria alla volta. Questo può rendere molto difficili i test o altri usi avanzati. Invece, offri la tua API tramite oggetti normali con la consapevolezza che normalmente si userebbe solo un'istanza. Usando static qualsiasi cosa è non orientata agli oggetti , è solo una programmazione procedurale sottilmente velata.

Riepilogo: public variable è pessimo, public static method() non è neanche eccezionale. private variable è buono, come public setVariable(…) .

    
risposta data 19.02.2014 - 02:23
fonte

Leggi altre domande sui tag