Ver Mensaje Individual
  #10 (permalink)  
Antiguo 27/06/2007, 09:56
DarioDario
 
Fecha de Ingreso: junio-2005
Mensajes: 981
Antigüedad: 19 años, 7 meses
Puntos: 2
Re: Mi primer intento de clase

Cita:
Iniciado por GatorV Ver Mensaje
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.