Cita:
Iniciado por _ssx En el momento que quieres separar tu motor de persistencia para tener Flexibilidad
Código PHP:
interface Persistencia
{
public function conectar();
public function desconectar();
public function ejecutar(SQL $sql);
}
class SQLServer implements Persistencia{
}
class ORACLE implements Persistencia{
}
class MySQL implements Persistencia{
}
class Noticia{
private $_db;
public function setDb(Persistencia $db){
$this->_db = $db;
}
public function getNota(){
$this->_db->ejecutar('SELECT BLA BLA BLA');
}
}
Entonces ya tu noticia puedes enviarle cualquier tipo de "persistencia". por que estas usando una interfaz "comun" debido a que todas las clases que implementan Persistencia tendrán los mismos metodos.
Código PHP:
$nota = new Noticia();
$nota->setDb(new Oracle());
$nota->getNota();
Código PHP:
$nota = new Noticia();
$nota->setDb(new Mysql());
$nota->getNota();
Código PHP:
$nota = new Noticia();
$nota->setDb(new SQLServer());
$nota->getNota();
Si observas getNota de la noticia, NO necesita saber con que base de datos esta tratando ;) eso lo hace el lenguaje automaticamente con polimorfismo indirecto.
Perfecto,
Sabía para que se usa la interfaz, como un contrato y para asegurarnos de que cumple unos requisitos.. pero no la he implementado en mi clase que trabaja con la base de datos.. jeje ahora ya lo se.. mi idea era usar la clase con el mismo nombre y con funcionamiento distinto, de esa manera sólo tendría que cambiar el código de la clase.. aunque con el uso de la interfaz también puedo.
Un saludo!!