Pregunta

Digamos que tengo un modelo de usuario. ¿Colocaría métodos en el modelo mismo o como plantilla para poder acceder desde el objeto de la tabla de usuario?

En otras palabras, lo que es más preferible:

$u=new User();
$u->register($username, $password, $email);

o

$userTable = Doctrine::getTable('User');
$userTable->register($username, $password, $email);

Mi instinto sería el segundo, ya que lógicamente tiene más sentido, pero ¿qué pasa con cosas como cambiar la contraseña, iniciar sesión, etc.? ¿Debo realmente ponerlos en el modelo de Usuario mientras mantengo cosas como registrar en el objeto de la tabla de usuario?

¿Fue útil?

Solución

Probablemente no sea una respuesta completa a su pregunta, pero puede interesarle echar un vistazo a las diapositivas si Play-Doh: Modelando tus objetos conferencia que Matthew Weier o'phinney publicó hace unos días; contienen cosas bonitas que pueden hacerte pensar en Modelos ;-)

(Me hicieron pensar ... Pero todavía no puedo dar una respuesta definitiva a tu pregunta: diría "depende" ... Pero no estoy seguro de qué ^^)

Probablemente, en la situación de una gran aplicación, usaría una capa más:

  • Modelo, para acceder a los datos
  • " Servicio " ;, para manipularlo; poder hacer más de lo que pondría en el Modelo ... Y no tener eso en el Controlador, donde no pertenece
  • Y, por supuesto, Controlador y Vistas

Pero nunca lograrás que todos estén de acuerdo ... Así que yo diría que elijas una forma y me asegures de que todos en tu equipo hagan lo mismo para todo el proyecto: no hay nada peor que demasiadas formas diferentes mezcladas en una proyecto / aplicación!

Otros consejos

Generalmente, si las cosas se relacionan con una instancia específica de un Usuario, es decir: usted o yo, pertenecen a la clase Usuario. Si se relacionan con un grupo de usuarios, o aún no tenemos el usuario (es decir: cargarlos desde la base de datos), entonces pertenecen a la clase Tabla.

Haría tu ejemplo como:

class UserTable {
  function register($username, $password, $email) {
    $user = new User;
    $user->username = $username;
    $user->password = $password;
    $user->email = $email;
    $user->save():
  }
}

Sin embargo, la gente discutirá sobre dónde pertenecen algunas cosas, ¡y ahorrar es una de ellas! Sé que Propel, que es otro ORM PHP similar, incluye un método de guardar en su equivalente de tabla, así como en su equivalente de objeto, y su registro es algo similar a esto. ¡Así que seguro que pronto habrá alguien para discutir el otro lado!

Para responder las otras preguntas, en mi opinión:

El cambio de contraseña pertenece al Usuario, definitivamente: está cambiando la contraseña de un usuario, solo está cambiando un campo.

El inicio de sesión debe estar en la clase de tabla: es un caso especializado de recuperación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top