Le interfacce del listener devono essere nidificate?

1

In Java lo schema di osservatore è implementato con almeno un'interfaccia (spesso finendo in Listener o Observer ). Tali interfacce possono essere inserite nidificate all'interno della classe o separate, ad esempio:

public class FooService extends RunnableService {
    // Nested interface
    public interface Listener {
        // ...
    }

    private Collection<Listener> listeners;

    // ...
}

// Separate interface
public interface FooServiceListener {
    // ...
}

public class FooService extends RunnableService {
    private Collection<FooServiceListener> listeners

    // ...
}

Il nome dell'interfaccia nidificata è più lungo di un solo carattere e non deve essere preceduto dal nome della classe per evitare conflitti di nome semplici.

Ci sono altri argomenti a favore o contro una delle due varianti (oltre alle preferenze personali)?

    
posta user3998276 04.11.2015 - 14:26
fonte

1 risposta

1

Se si incorpora l'interfaccia all'interno della classe, si accoppia strettamente l'interfaccia a un'implementazione. Questo presuppone che questa implementazione sia l'unica per quell'interfaccia, che è una cattiva ipotesi da fare. In effetti, con questo modo di pensare, perché persino avere l'interfaccia in primo luogo.

Tale accoppiamento dell'interfaccia all'implementazione è un esempio dell'entourage anti-pattern in azione: l'uso dell'interfaccia ti costringe a portare con sé un'implementazione, anche se non necessaria.

Quindi la conclusione è: mantieni i due separati. Sono entità separate e non dovrebbero essere accoppiate.

    
risposta data 04.11.2015 - 14:47
fonte

Leggi altre domande sui tag