Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

duda entre modelo y controlador

Estas en el tema de duda entre modelo y controlador en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola, tengo que armar un modelo y un controlador para crear galerias de fotos y subir fotos. Así que estoy armando un modelo para las ...
  #1 (permalink)  
Antiguo 11/01/2010, 20:32
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 15 años, 1 mes
Puntos: 43
duda entre modelo y controlador

Hola,
tengo que armar un modelo y un controlador para crear galerias de fotos y subir fotos. Así que estoy armando un modelo para las galerias y otro para las fotos, y desde el controlador "galerias" uso ambos modelos.
La duda que tengo es cuando tengo que hacer las validaciones respecto al nombre de las galerias y las imagenes, para eso uso una clase llamada utilidades que contiene un método que reemplaza el nombre que se pasa por uno que sea valido para ser un directorio o un nombre de archivo (espacios, tildes, etc). Bien la consulta es esta validacion la tengo que hacer en el controlador o se puede hacer en el modelo? Yo la estaba haciendo en el modelo, pero para usar validar los datos tengo que instanciar la clase utilidades y la de imagenes eso me parece medio raro..... y no me convence.

Desde ya muchas gracias
  #2 (permalink)  
Antiguo 11/01/2010, 20:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: duda entre modelo y controlador

Es mejor hacerlo en el controlador para que pases los datos ya filtrados a ambos modelos. Aunque no hay una limitación o restricción de hacerlo en el modelo y que estos interactuen.

Saludos.
  #3 (permalink)  
Antiguo 12/01/2010, 10:58
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 15 años, 1 mes
Puntos: 43
Respuesta: duda entre modelo y controlador

muchas gracias gatorV, como siempre "salvando las papas" a la gente jejej.
  #4 (permalink)  
Antiguo 12/01/2010, 14:45
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 9 años, 11 meses
Puntos: 36
Respuesta: duda entre modelo y controlador

Cita:
Iniciado por destor77 Ver Mensaje
Bien la consulta es esta validacion la tengo que hacer en el controlador o se puede hacer en el modelo? Yo la estaba haciendo en el modelo, pero para usar validar los datos tengo que instanciar la clase utilidades y la de imagenes eso me parece medio raro..... y no me convence.
En tu modelo, los datos provienen del sistema de archivos. La validación que se haga sobre ese sistema de archivos es lógica de tu modelo; para tener un código reusable deberías hacer esa validación ahí y no en el controlador. Que no te convenza quizá será cuestión de tu arquitectura, pero tú querrás agarrar un modelo y tener la confianza que la información que ingreses y/o recuperes funcionará y-ya.

Una simple acrónimo: DRY

Dependiendo de tu aplicación: ¿Qué pasará cuando quieras utilizar el mismo modelo en otro controlador?, ¿Y en otro módulo?, ¿Mismo controlador y diferentes acciones?, ¿vas a estar haciendo la misma validación una y otra y otra vez?. Entonces, ¿es lógica del controlador o del modelo?; Pregunto
  #5 (permalink)  
Antiguo 12/01/2010, 16:57
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 15 años, 1 mes
Puntos: 43
Respuesta: duda entre modelo y controlador

Cita:
Iniciado por maturano Ver Mensaje
En tu modelo, los datos provienen del sistema de archivos. La validación que se haga sobre ese sistema de archivos es lógica de tu modelo; para tener un código reusable deberías hacer esa validación ahí y no en el controlador. Que no te convenza quizá será cuestión de tu arquitectura, pero tú querrás agarrar un modelo y tener la confianza que la información que ingreses y/o recuperes funcionará y-ya.
En realidad las validaciones de los nombres, como las clases que uso para crear las imágenes, son clases independientes que las instancio en mi controlador base precisamente para eso para ser reutilizadas en cualquier lugar del sistema.. Por eso cuando llegue al momento de validar los datos, me encontré con esa duda, si usar los métodos de esas clases en el modelo o en el controlador.

salu2
  #6 (permalink)  
Antiguo 12/01/2010, 18:05
Avatar de maturano  
Fecha de Ingreso: enero-2010
Ubicación: /home/
Mensajes: 537
Antigüedad: 9 años, 11 meses
Puntos: 36
Respuesta: duda entre modelo y controlador

No entiendo, ¿tu preocupación es porque tienes una instancia de la clase?.

Lo que digo es, si es lógica de tu modelo (cosa que no sé, no haz colocado ejemplos como para saber) debería ir en tu modelo. No tiene caso hacer lo mismo una y otra y otra vez en cada controlador/acción/módulo donde utilices ese modelo.

Uno de las ventajas de la orientación a objetos es su mantenibilidad. ¿Qué pasa si hay un error en esa validación?; utilizando OO deberías --en teoría -- solo modificar un método, atender solo una parte bien identificada de tu código y la solución debería "expandirse" a cualquier cosa que utilice esa misma validación. Pregunto: ¿con la validación en tu controlador va a suceder así o tendrías que buscar todos los lugares donde hiciste lo mismo?.

Que utilizas alguna clase genérica para hacer esa validación, ¿y?. Tú deberías traer tu modelo y confiar en que funciona, no pensar en cómo hace su trabajo, bien puede utilizar una "clase genérica", código plano y duro, algún servicio web, llamadas al sistema, lo que sea. Ese es el concepto de encapsulación: Tú no deberías pensar en cómo hace lo que hace, solo asegurarte que lo haga bien. Si el asunto es que ya hay una instancia de una clase, para eso está Singleton, o podría ser que en realidad tiene que ser un método estático y no tendría por qué instanciar el objeto.

Y no, no digo que la validación DEBE ir en tu modelo . Puede ir en uno u otro lugar, solo planteo diferentes escenarios ...
  #7 (permalink)  
Antiguo 13/01/2010, 10:40
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 14 años, 1 mes
Puntos: 890
Respuesta: duda entre modelo y controlador

Quizas es el error más frecuente(que muchas veces pasamos por alto).
Tampoco soy un fundamentalista del estandar, pero un codigo limpio y bien ordenado no solo te ayudara a ti, si no a cualquieera que lea tu codigo.

Es simple:

Controlador "hace de pasarela entre el modelo y la vista"
Modelo Agrupal la logica del programa, recibe la orden la procesa y envia la respuesta al controlador
Vista recibe y muestra lo que el controlador le envia.

Siguiendo este patron:
Por lógica el proceso de validación lo debe hacer tu modelo y devolver una respuesta.

Pero nada impide hacerlo en cualquier lugar, es cuestion de tu comodidad, pero algo bien ordenado es mas facil de encontrar.

Saludos.
__________________
Drupal Argentina
  #8 (permalink)  
Antiguo 14/01/2010, 08:39
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 15 años, 1 mes
Puntos: 43
Respuesta: duda entre modelo y controlador

maturano y nucklear,
muchas gracias por sus respuestas, ya había leído que las validaciones pueden ir en el controlador o el modelo. Sólo que he visto en algunos framework que el modelo solo tiene en algunos la tabla a la que hacen referencia y nada más (porque usan algun activeRecord) y en otros solo los metodos pero sin validación. Yo como dije lo estaba intentando validar como creo las galerías y subo las fotos desde el modelo, pero no me pareció "limpio" que en el modelo este usando clases para subir imágenes, ni haciendo validaciones para ver si la carpeta se creo correctamente. Por eso decidí hacer todo eso desde el controlador y dejar los modelos para los abm en la base de datos, nose si esta bien o no, pero sin llegar a ser un "fundamentalista" me pareció "mas limpio" jeje.
Gracias
Salu2
  #9 (permalink)  
Antiguo 14/01/2010, 09:35
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: duda entre modelo y controlador

Es por eso la razón por la cual Zend separo lo que es el DbTable de lo que es el modelo y en el Quickstart te animan a usar un DataMapper, la idea es que tu modelo sea muy rico en validaciones y este modelo se comunique internamente con el DbTable y cree un row con el ActiveRecord para salvar los datos, pero así dejas el modelo con todas sus validaciones y lo puedes instanciar desde cualquier controlador y esperar el mismo resultado solo llamando a $modelo->guardar() por ejemplo.

Saludos.
  #10 (permalink)  
Antiguo 14/01/2010, 10:35
Avatar de destor77  
Fecha de Ingreso: noviembre-2004
Ubicación: Gálvez, Santa Fe, Argentina
Mensajes: 2.654
Antigüedad: 15 años, 1 mes
Puntos: 43
Respuesta: duda entre modelo y controlador

Entiendo Gatorv, es mas en la empresa donde trabajaba hasta hace unos meses, tenían algo parecido implementado a lo de $modelo->guardar(), pero ellos en el modelo solo hacía un:
Código PHP:
Ver original
  1. class mimodelo extends model{
  2. protect $table="el nombre de la tabla del modelo";
  3. }

y despues desde el controlador se llamaba asi:
Código PHP:
Ver original
  1. class micontrolador extends controller{
  2. private $mimodelo
  3.  
  4. function __construct(){
  5. $this->mimodelo = new mimodelo();
  6. }
  7.  
  8. public function algo(){
  9.   $busqueda=$this->mimodelo->find(1);
  10.   $salva= $this->midemodelo->save();
  11. }

Todas la validaciones de tipo de campo en la db (si era string, date, etc) la hacia en el acitverecord, pero las validaciones como la que yo estoy intentando hacer las hacia desde el controlador.
  #11 (permalink)  
Antiguo 15/01/2010, 10:36
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 10 años, 11 meses
Puntos: 5
Respuesta: duda entre modelo y controlador

>En casos como esto, yo hago un controlador generico con metodos que se que puedo usar una y otra ves en mas controladores, por la tanto estos nuevos controladores heredan de la clase controladora hecha al inicio.
  #12 (permalink)  
Antiguo 15/01/2010, 10:53
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 13 años, 6 meses
Puntos: 2135
Respuesta: duda entre modelo y controlador

Cita:
Iniciado por destor77 Ver Mensaje
Entiendo Gatorv, es mas en la empresa donde trabajaba hasta hace unos meses, tenían algo parecido implementado a lo de $modelo->guardar(), pero ellos en el modelo solo hacía un:
Código PHP:
Ver original
  1. class mimodelo extends model{
  2. protect $table="el nombre de la tabla del modelo";
  3. }

y despues desde el controlador se llamaba asi:
Código PHP:
Ver original
  1. class micontrolador extends controller{
  2. private $mimodelo
  3.  
  4. function __construct(){
  5. $this->mimodelo = new mimodelo();
  6. }
  7.  
  8. public function algo(){
  9.   $busqueda=$this->mimodelo->find(1);
  10.   $salva= $this->midemodelo->save();
  11. }

Todas la validaciones de tipo de campo en la db (si era string, date, etc) la hacia en el acitverecord, pero las validaciones como la que yo estoy intentando hacer las hacia desde el controlador.
No de hecho si ves el Quickstart de ZF, puedes ver que lo que es el DataTable (como el primer ejemplo) esta integrado al modelo pero no llega al controlador, lo que llega al controlador es el modelo como tal.

Saludos.

Etiquetas: controlador, modelo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:11.