Cita:
Iniciado por GatorV La idea de que todo este atado a la misma interface es para que cada motor que regrese un resultado tenga la misma firma de metodos, es decir atar todo a un mismo contrato y que sepas que independientemente si estas usando mysql, oracle, o postgre, puedes usar $result = $db->Query() o $result->fetchRow() ya que todos los metodos usan la misma interface que los obliga a implementar esos metodos.
Saludos.
Si, la teoría de la interface la tengo mas o menos clara. Yo lo que no entiendo es porque aplicarla en este ejemplo, la clase Result puede ser una y genérica para cualquier motor. Ejemplo:
Código PHP:
class AlgunMotor
{
[...]
public function query($sql){
$result = mysql_query($sql);
$array = array();
while($row = mysql_fetch_assoc($result))
$array[] = $row;
return Result($array);
}
}
class Result
{
private $resultados = array();
public function __construct($result){
if(is_array($result))
$this->resultados = $result;
}
public function siguiente(){
return next($this->resultados);
}
[...]
}
Bueno, creo que ahí me supe explicar un poco mejor. De la forma en que lo hice (obviamente falta el Factory) la implementación del motor devuelve un objeto Result cuando se realiza la query y la clase Result termina siendo la misma para todos los motores y sin ninguna implementación especifica. Entiendo que si hiciéramos así perderíamos algunas utilidades según el motor (por ej. mysql_insert_id() ). Si cada motor tuviera su implementación del objeto Result que devuelve aplicaríamos lo que dices de la interface pero si hiciéramos una implementación por motor, de otra forma es innecesario.
Tal vez me este fallando un concepto, pero creo no estar muy errado... favor de corregir si estoy mal.
Saludos.