È una cattiva pratica eseguire un'ereditarietà dell'interfaccia "opzionale"?

2

Dire ... stai provando a scrivere un codice NetworkCallback in java:

public interface NetworkCallback {
    void onNetworkResult1(Object object);
    void onNetworkFailure(Object object);
}

vuoi usarlo, ma a volte hai due risultati di rete:

public interface NetworkCallback2 implements NetworkCallback {
    void onNetworkResult2(Object object);
}

ea volte potresti averne tre:

public interface NetworkCallback3 implements NetworkCallback2 {
    void onNetworkResult3(Object object);
}

Questa è considerata una cattiva pratica? Quali sono le alternative migliori?

    
posta lawonga 27.01.2017 - 06:34
fonte

1 risposta

2

Migliori alternative hanno queste caratteristiche:

  • Nomi migliori di NetworkCallback3 e onNetworkResult2 . Un nome dovrebbe chiarire cosa appartiene all'interfaccia e cosa no. Non ho idea del perché onNetworkResult3 non appartenga a NetworkCallback2 . Se mi dici che è il numero che ti batterò con il numero magico stick.

  • Una soluzione polimorfica riutilizzerebbe un metodo onNetworkResult() . Anziché utilizzare metodi con nomi diversi, utilizzerebbero oggetti diversi ciascuno con un metodo con lo stesso nome e firma, ciascuno con un'implementazione diversa. Oltre agli implementatori di NetworkCallback, anche il% passato di co_de potrebbe essere polimorfo.

  • L'ereditarietà dell'interfaccia verrebbe utilizzata per aggiungere funzionalità veramente nuove. Non diversi sapori di vecchie funzionalità.

L'errore più critico che viene fatto qui è che l'autore di questo codice sta esaminando il problema solo strutturalmente. Se ignorerai la semantica potresti anche programmare un codice macchina.

    
risposta data 28.01.2017 - 16:28
fonte

Leggi altre domande sui tag