Devo estendere un'interfaccia o mantenerla indipendente?

0

Sto cercando di decidere se estendere un'interfaccia di base con metodi aggiuntivi o creare diverse interfacce indipendenti. Ho un'interfaccia Task simile a questa

interface Task
{
    public function name();
    public function run(array $args);
}

Ora voglio aggiungere i metodi facoltativi description e dependencies . Dovrei creare una nuova interfaccia DetailedTask come questa?

interface DetailedTask extends Task
{
    public function description();
    public function dependencies();
}

In questo modo ho potuto scegliere di implementare l'interfaccia base Task per una classe di attività di base o l'interfaccia DetailedTask se avessi bisogno di una descrizione e delle dipendenze. In alternativa, potrei creare interfacce separate per i metodi extra come questo.

interface Describable
{
    public function description();
}

interface TaskDependent
{
    public function dependencies();
}

Secondo il principio di separazione delle interfacce, il secondo è migliore perché è più flessibile. Tuttavia, non prevedo mai di utilizzare Describable e TaskDependent su qualcosa oltre a un'istanza Task . Le interfacce extra sembrano aggiungere ulteriore complessità. Quale tecnica dovrei usare?

    
posta Justin Howard 12.03.2015 - 05:27
fonte

2 risposte

2

Prima di tutto, con i dettagli della tua domanda:

Now I want to add optional description and dependencies methods.

Se vuoi un metodo opzionale, non dovresti usare l'interfaccia, perché come per le regole dell'interfaccia, DEVE essere necessario definire i metodi nella classe di implementazione. Vedi interfaccia PHP .

Quindi, secondo questa regola, la tua prima soluzione non funzionerà perché se definisci la classe che implementa DetailedTask , allora quella classe deve definire sia il metodo description che dipendenze .

Il secondo modo ti darà la libertà di scegliere qualsiasi interfaccia tu voglia implementare.

    
risposta data 12.03.2015 - 05:54
fonte
1

Vai sempre per interfacce separate in questo caso. Poiché la parte attività è obbligatoria e la seconda parte è facoltativa.

L'interfaccia obbliga sempre a scavalcare tutti i metodi menzionati.

Ora pensa se non vuoi usare la parte opzionale. Ancora dovrai scavalcarlo. Anche se non fa niente.

    
risposta data 12.03.2015 - 05:55
fonte

Leggi altre domande sui tag