Interfaccia Java solo per commenti. Buona pratica?

2

Ho una classe che ha un sacco di funzioni e non posso dividerla in più classi:

Class A {
    // attributes

    /**
     * Descriptive of foo
     *
     * @param i ...
     * @param j ...
    */
    public void foo(int i, double j) {
        ....
    }

    // doc for foo2
    public void foo2() {
        ....
    }

    ....

    // doc for foo8
    public void foo8() {
        ....
    }
}

La domanda è, è una buona pratica implementare un'interfaccia che si occuperà dei commenti?

/**
 * No function bodies, so there is more place here !
*/
interface AHelper {

    /**
     * Descriptive of foo
     *
     * @param i ...
     * @param j ...
    */
    public void foo(int i, int j);

    // etc
}

/**
 *
 * @see A
*/
class A implements AHelper {

    public void foo(int i, int j) {
        ....
    }

    // etc
}

In questo modo, l'interfaccia ha lo stesso aspetto delle intestazioni C. L'idea alla base di questo è avere due file con circa ~ 150 righe e non un singolo file (la classe) con 300 righe.

    
posta Paul Lemarchand 16.10.2017 - 11:12
fonte

2 risposte

17

No, non dovresti introdurre interfacce solo per documentazione. Ciò rimuove uno dei grandi vantaggi di Javadoc: che i documenti sono proprio accanto al codice, il che rende più facile tenerli sincronizzati.

Introduci interfacce solo perché trasmettono un significato nel tuo progetto. Se una classe non viene utilizzata attraverso un tipo di interfaccia, qual è il punto di tale interfaccia? Per quanto riguarda il confronto con le intestazioni C: non dichiarare e documentare le funzioni di supporto statico in un'intestazione perché non vengono mai chiamate tra le unità di compilazione. Non fanno parte dell'astrazione fornita dal file di intestazione.

Le interfacce prive di significato non semplificano il tuo codice: rendono il codice più difficile da capire perché dobbiamo prima capire che l'interfaccia non fornisce alcuna astrazione utile e non viene mai utilizzata.

Inoltre, una classe di 300 righe rientra in una dimensione di classe accettabile, specialmente se contiene anche Javadoc.

    
risposta data 16.10.2017 - 11:27
fonte
6

Sono d'accordo con la risposta fornita da @amon e vorrei amplificarla un po '.

Generalmente, non è una buona idea introdurre un'interfaccia quando ne hai solo un'implementazione. E sì, le lezioni di simulazione per i tuoi test unitari valgono come implementazioni di un'interfaccia.

Per ulteriori chiarimenti, vedi Principio di astrazione riutilizzata .

Ciò che mi piace della tua domanda, però, è che si può vedere che hai pensato di separare la classe in diverse classi più piccole ( SRP ) e che documenti il tuo codice. Quelle sono buone pratiche. Continua così.

    
risposta data 16.10.2017 - 12:01
fonte

Leggi altre domande sui tag