L'uso di interfacce sul codice interno è una buona idea? [duplicare]

0

Sto lavorando a una serie di test automatizzati che utilizziamo internamente al lavoro. Ultimamente, abbiamo progettato classi che implementano interfacce oltre all'ereditarietà.

A quanto ho capito, le interfacce in Java sono utilizzate per soddisfare un contratto. Una classe che implementa un'interfaccia deve includere implementazioni di qualsiasi membro di tale interfaccia. Questo funziona molto bene per la creazione di librerie o oggetti che devono essere utilizzati da team o individui esterni poiché garantisce che alcuni metodi saranno presenti.

Che dire del codice interamente conservato in una singola squadra in una singola posizione? (Supponiamo che questo codice rimarrà interno, altrimenti questa domanda cambierà completamente.) Se posso semplicemente andare alla mia cronologia VCS o chiedere a un membro del team delle modifiche al codice, devo davvero applicare queste modifiche usando le interfacce? Anche se una squadra è grande, potresti ancora sviluppare convenzioni o test per verificare le cose. Mi sento come se stessimo semplicemente lavorando di più usando le interfacce, ma forse ci sono argomenti addizionali.

NOTA: questo progetto è un progetto Java e rimarrà tale. Le interfacce qui sono istanze di interface con tutte le sintassi e le regole applicabili.

    
posta joshin4colours 15.05.2014 - 18:39
fonte

2 risposte

2

Cerchiamo di chiarire alcune cose.

Innanzitutto, lo scopo principale di un'interfaccia è consentire più implementazioni. Se esiste solo un'implementazione, non è necessaria un'interfaccia; la classe definisce già la propria API pubblica. Alcuni scenari di test delle unità richiedono interfacce, perché una simulazione è un'implementazione alternativa.

Mentre un'interfaccia specifica un'API, non specifica necessariamente un contratto di per sé. I contratti contengono elementi aggiuntivi come restrizioni sui valori dei parametri, a cui mancano le interfacce. Una classe di implementazione soddisfa semplicemente l'API dell'interfaccia.

Anche se è vero che è necessario implementare tutti i membri di un'interfaccia, tale implementazione potrebbe semplicemente gettare un UnsupportedOperationException .

    
risposta data 15.05.2014 - 18:55
fonte
0

Il punto principale di un'interfaccia non è quello di nascondere le cose in modo che i malintenzionati programmatori non possano sfruttare le cose per cui non hanno pagato. È per semplificare l'attività concettuale di gestire un modulo.

Conoscere solo il minimo su una classe necessaria per l'utilizzo dei suoi servizi è buono . Se la classe espone più dettagli del necessario, l'utente aggiungerà inevitabilmente questo al suo modello mentale della classe, e poiché la memoria, l'attenzione, ecc. Sono finiti, questo è uno sforzo sprecato che potrebbe mancare in altri, più importanti luoghi.

Tutto questo si applica ad altri programmatori tanto quanto alla tua squadra o anche a te stesso. Usando una classe tu stesso hai scritto senza conoscendo i dettagli della sua implementazione è un ottimo segno. Mostra che hai risolto con successo un'attività solo una volta e solo una volta, e sei passato ad altre attività di livello superiore. Le interfacce sono uno strumento prezioso per raggiungere questo obiettivo (tra le altre cose, ad esempio implementazioni multiple), quindi i motivi per utilizzarle non hanno nulla a che fare con quanti sviluppatori o che tipo di team interagiscono con una classe.

    
risposta data 15.05.2014 - 19:16
fonte

Leggi altre domande sui tag