Prima di tutto, il mio linguaggio ubiquitario è PHP, e sto pensando di imparare Java.
Quindi lascia che divida la mia domanda su due parti strettamente correlate.
Ecco la prima parte.
Dire che ho una classe modello di dominio. Ha alcuni getter, setter, alcuni metodi di interrogazione, ecc. E un giorno voglio avere la possibilità di confrontarli. Quindi sembra:
class MyEntity extends AbstractEntity
{
public function getId()
{
// get id property
}
public function setId($id)
{
// set id property
}
// plenty of other methods that set or retrieve data
public function compareTo(MyEntity $anotherEntity)
{
// some compare logic
}
}
Se fosse stato Java, avrei dovuto implementare un'interfaccia Comparable
. Ma perché? Polimorfismo? Readbility? O qualcos'altro? E se fosse PHP, dovrei creare l'interfaccia Comparable
per me stesso?
Quindi ecco la seconda parte.
Il mio collega mi ha detto che è una regola empirica in Java creare un'interfaccia per ogni aspetto comportamentale della classe. Ad esempio, se volessi presentare questo oggetto come una stringa, dovrei dichiarare questo comportamento con qualcosa come implements Stringable
, dove in caso di PHP Stringable
sarebbe simile a:
interface Stringable
{
public function __toString();
}
Questa è davvero una regola empirica? Quali benefici si ottengono con questo approccio? E ne vale la pena in PHP? E in Java?