Foros del Web » Programando para Internet » PHP »

PHP OO Como comunicar distintos modulos MVC

Estas en el tema de Como comunicar distintos modulos MVC en el foro de PHP en Foros del Web. Hola, Primero que nada, decir que ya hice una consulta sobre esto pero no puse ningun grafico con lo cual nose si se entendio bien. ...
  #1 (permalink)  
Antiguo 28/10/2013, 19:27
 
Fecha de Ingreso: mayo-2007
Mensajes: 54
Antigüedad: 12 años, 6 meses
Puntos: 1
Como comunicar distintos modulos MVC

Hola,

Primero que nada, decir que ya hice una consulta sobre esto pero no puse ningun grafico con lo cual nose si se entendio bien.

Estoy queriendo hacer un simple diagrama con UML donde un usuario puede logearse, envíar y recibir mensajes. Voy a tener dos tipos de usuarios: Admin y Operator. Las funciones de cada uno serán:

- Admin: Podra enviar, recibir, eliminar mensajes, ABM de usuarios y ABM de post
- Operator: Podra leer Post y enviar, recibir y eliminar mensajes

El diagrama de clase que hice es el siguiente:



Mi idea es separar por modulos y claramente yo identifico 3: Usuarios, mensajes y Posts.

Primero que nada quería saber que opinaban del diagrama si estoy bien encaminado o no.

Lo que también quiero hacer es aplicar MVC, lo que estuve viendo de MVC son ejemplos simples no encontré un ejemplo donde se separe por modulos. Un diagrama aproximado donde estoy intentando aplicar MVC es el siguiente:



El problema que tengo es cuando necesito ejecutar un método de la clase Post desde la clase Admin por ejemplo, el método createPost().

De esta manera, yo estaría comunicando los modelos de distintos modulos con lo cual no estaría cumpliendo con el principio de MVC. A alguien se le ocurre como podría hacer o tuvo una situación similar.

Aclaro que por el momento no me interesa aprender ningún framework, quiero implementar mi propia solución. Algo que vi es aplicar HMVC que aplican algunos frameworks, es decir, tener un controller raíz y desde ahí derivar a quien corresponda, como en la siguiente imagen:



Pero la verdad esta metodología de HMVC no me termina de convencer ya que si quiero agregar un nuevo modulo se me hace que tengo que modificar en muchos lugares. Prefiero intentar resolverlo de otra forma. Se les ocurre algo?

Tambien comentar que no soy experto en diagramación asique cualquier critica que tengan sobre el diagrama será bienvenida, muchas gracias.
  #2 (permalink)  
Antiguo 28/10/2013, 19:57
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Como comunicar distintos modulos MVC

Lo primero que te diria es que yo no veo los métodos "CreatePost",etc en las clases de usuario o derivadas.Cualquier cosa que ocurra en una web, va a ser realizada por un "usuario" de algún tipo (incluido anónimo, otros sistemas, etc).Eso llevaría a que existiera un método en Usuario para cualquier cosa que se pueda hacer en la web.
Y también te provoca ese problema de comunicar modelos de distintos módulos.Tanto porque las llamadas a Post no se harían a través de Usuario, como porque la instancia de usuario actual puede considerarse un singleton global (hay excepciones).

Sobre la estructura que presentas, no veo la diferencia entre los controladores de lo que llama "Service tier", y un método de un modelo.Por otro lado, qué es una vista del "service tier"? Tiene algo que ver con la vista del "Web tier"?No le veo mucho sentido a esa estructura.
  #3 (permalink)  
Antiguo 28/10/2013, 20:26
 
Fecha de Ingreso: mayo-2007
Mensajes: 54
Antigüedad: 12 años, 6 meses
Puntos: 1
Respuesta: Como comunicar distintos modulos MVC

Ok, sobre la imagen de HMVC fue solo para ejemplificar, es una imagen que copie de algun lado, de esa manera entiendo que deberia tener un solo controlador por donde pasen todas las solicitudes y que este se encargue de llamar al modulo correspondiente.

Estoy de acuerdo, cuando decis que con el criterio que estoy teniendo la clase usuario tendria muchos metodos ya que se tendria uno por cada cosa que quiera hacerse. Me podrias dar tu opinion rapidamente como harias para diagramar lo que estoy planteando, al menos, como seria la relacion entre los usuarios y post o los usuarios y mensajes? Muchas gracias por tu tiempo.
  #4 (permalink)  
Antiguo 28/10/2013, 23:35
 
Fecha de Ingreso: julio-2013
Ubicación: México
Mensajes: 361
Antigüedad: 6 años, 4 meses
Puntos: 55
Respuesta: Como comunicar distintos modulos MVC

Hola, yo creo que lo que quieres hacer, podrias hacerlo con alguna variacion de un MVP model-view-presenter. Transformando el presenter en un front contoller recursivo.

De esta forma puedes tener modulos ó componentes (model) que no saben nada de ningun otro, vistas tontas que solo muestran la informacion y el front controller que llama modelos (recursivamente dependiendo de las necesidades) y una vista apropiada.

Espero me de a entender.
Saludos
  #5 (permalink)  
Antiguo 29/10/2013, 03:44
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 926
Antigüedad: 12 años, 8 meses
Puntos: 269
Respuesta: Como comunicar distintos modulos MVC

Cita:
Iniciado por cobolero_poseido Ver Mensaje
Estoy de acuerdo, cuando decis que con el criterio que estoy teniendo la clase usuario tendria muchos metodos ya que se tendria uno por cada cosa que quiera hacerse. Me podrias dar tu opinion rapidamente como harias para diagramar lo que estoy planteando, al menos, como seria la relacion entre los usuarios y post o los usuarios y mensajes? Muchas gracias por tu tiempo.
Como te decía, el objeto usuario podrías considerarlo un singleton global.Siendo más estrictos, es la Request la que es un singleton global, y ésta tiene al usuario.
Los controladores no instancian User para crear un post.Crean un objeto Post y lo parametrizan.

Etiquetas: mvc
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 23:37.