2010-06-21 24 views
5

Voy a escribir un sitio web de reservas con php y ajax y realmente no puedo imaginar cómo mezclar estas dos herramientas con un diseño estricto orientado a objetos.OO PHP + Ajax sin marco

Estaba acostumbrado a hacer una llamada usando ajax a una página web php que devuelve el conjunto correcto de valores (cadena, xml, json) de forma procedural.

Con programación orientada a objetos ¿cómo se supone que funciona?

La solución más simple que puedo pensar es llamar a través de ajax una página php que solo instanciará un nuevo objeto de la clase correcta y luego hará un eco sobre el resultado de una simple llamada con los datos recibidos pero esto no t look very oo ...

Por ejemplo, para implementar la función de registro, debo hacer una llamada ajax a una página web register.php que, a su vez, creará un nuevo objeto de registro r y simplemente llama a r.register() con los datos correctos.

¿Existe una mejor solución a este problema?

Quiero especificar que no puedo usar ningún framework php porque es un proyecto didáctico y tengo esta regla que debo respetar.

Otra especificación: He leído muchos tutoriales que describen cómo escribir tu propio framework mvc, pero hacer esto parece ser una exageración para mi problema.

Gracias por su ayuda, todas las ideas serán apreciadas.

Respuesta

1

Como ya dijiste, realmente no necesitas un framework PHP y no necesitas construir tu propia implementación MVC (especialmente si trabajas con JSON o XML). Básicamente, usted es bastante libre sobre cómo hacer su modelo OO, por lo que su idea no es necesariamente incorrecta.

Algunos anti patrones OO que he visto personas que utilizan en PHP:

  • utilizar variables globales en clases
  • crear clases sin el elemento variables resultantes en el método llama siendo el mismo que en un estilo produral
  • directamente accediendo $ _GET, $ _POST etc. en una clase
  • Haciendo eco de salida html (en mi humilde opinión esto debe hacerse de plantillas de vista)

Un ejemplo de lo que es posible que desee hacer por el proceso de registro procesamiento de algunas variables $ _POST y devolver un mensaje de éxito JSON:

<?php 

class Registration 
{ 
    private $_data; 

    public function __construct($registrationdata) 
    { 
     $this->_data = $registrationdata; 
    } 

    public function validate() 
    { 
     // ... 
    } 

    public function register() 
    { 
     // ... 
     if($this->validate()) 
      return array("registered" => true, "username" => $this->_data["username"], 
       "message" => "Thank you for registering"); 
     else 
      return array("registered" => false, "username" => $this->_data["username"], 
       "message" => "Duplicate username"); 
    } 
} 

$reg = new Registration($_POST); 
echo json_encode($reg->register()); 

?> 
+0

Eso es exactamente lo que estaba pensando. Tal vez la gestión de sesiones podría ser un poco problemática de esta manera porque se convierte en una preocupación transversal. – TheSENDER

+0

Creo que no podrá deshacerse por completo de tener que lidiar con preocupaciones transversales. En cuanto a seguridad y administración de sesión, el patrón MVC funciona bastante bien porque siempre puedes hacerlo en tu controlador antes de hacer cualquier cosa. – Daff

+0

Pero creo que el modelo de código que ha publicado debe cambiarse un poco. Antes de la validación de entrada (obviamente no en la parte de registro), creo que debería verificar la validez de la sesión y, por lo tanto, casi todos los constructores de objetos del controlador necesitarán tomar un argumento de sesión. ¿Estoy en lo cierto? – TheSENDER

1

No hay ninguna razón para crear las clases si todo lo están haciendo es llamar a un par de funciones php sin estado sin relación.

+0

Tengo que administrar sesiones y bases de datos, supongo que será más sencillo si utilizo un enfoque completo oo. – TheSENDER