2010-04-26 17 views
10

¿Es un mal hábito trabajar con varios modelos en una acción de controlador? ¿Debería ser siempre como un controlador, una vista de modelo uno?PHP y MVC, modelos múltiples

+1

¡Excelente pregunta! ¡Es una pena que a nadie parezca importarle preguntas como esa! – Sliq

Respuesta

11

No, por supuesto, no es un mal hábito. Donde trabaje con varias tablas, entonces se necesitarán varios modelos.

El problema no es tanto con esto, sino con la capacidad de los marcos para manejar consultas avanzadas, uniones y filtrado basados ​​en estos modelos. Es uno de esos osgos cuando estás "obligado" a seguir la estética particular de un marco de trabajo sobre la interacción con la base de datos, pero esto depende, por supuesto, de qué marco y qué tan lejos dependas de los comportamientos mágicos.

¡No todos los proyectos son simples blogs! :)

editar: Debo decir también, que este tipo de cosas es uno de mis principales problemas con los frameworks MVC en general. El compromiso entre lo que su proyecto intenta lograr y lo que el marco permite siempre será donde se pierde el cabello y se invierten las últimas noches ...

+0

¡Gracias por la respuesta rápida! – PPPHP

+0

En mi opinión, la mayoría de su código debe estar en sus modelos, de los cuales habrá muchas clases. Definitivamente no es un mapeo uno a uno entre los modelos y los controladores. Eso sería algo malo. – d11wtq

+0

Sí, todo el mundo adora los modelos gordos :) – dmp

4

No podría imaginarme trabajar solo con una modelo a la vez Esas bases de datos se llaman 'bases de datos relacionales' por una razón. Todas las tablas interactúan entre sí.

De hecho, utilicé un marco que solo permitía cargar el modelo que estaba asociado con ese controlador. Definitivamente una experiencia horrible, las únicas operaciones que funcionaron fueron acciones básicas de CRUD.

+0

¡Gracias por la respuesta rápida! – PPPHP

1

Como todos los demás dicen, usted es libre de hacer lo que quiera. Sugeriría buscar en el sitio el marco que está utilizando y ver cómo lo usan otras personas. A menudo tienen "Proyectos que utilizan el Marco XXXX" allí.

Y al igual que el comentario de troelskin, 1 tabla no siempre es igual a un modelo. Algunos de los ejemplos que usan un patrón de registro activo básico (como CodeIgniter) tienden a ir con el método del modelo de 1 tabla 1.

2

No, no es una mala práctica.

Los controladores asignan a los recursos HTTP (también conocidos como URI) más que a sus modelos de datos. Una solicitud de cierto recurso (usuarios, productos, ...) a menudo puede requerir la carga y/o almacenamiento de datos desde/en varios lugares (una tabla DB, el sistema de archivos, un servicio web remoto, ...), por lo que Controlador 1: 1: el mapeo de modelos probablemente sea la excepción y no la regla. A menos que su sitio web sea realmente simple.

Cuestiones relacionadas