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?