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?