2012-01-20 18 views
8

Tengo una pregunta acerca de MVC. Particularmente sobre modelos. Supongamos que tengo una tabla de categorías en mi base de datos. Ahora me gustaría obtener resultados tanto para una sola categoría para una vista detallada como para múltiples categorías para una lista. También es posible que necesite consultar una serie de categorías para diferentes propósitos.Múltiples modelos frente a modelo único

Ahora la pregunta es; ¿Tiene más sentido tener dos modelos separados? Al igual que el modelo de categoría para las operaciones en una sola categoría y las operaciones de modelo de categorías en múltiples categorías.

Mi pensamiento es que cuando estoy usando el modelo category no necesito detalles adicionales para varias categorías. Entonces, separarlos tiene sentido para mí. Pero no estoy seguro.

¿Alguna idea?

+0

"Ahora me gustaría preguntas tanto una única categoría de detalles" no tiene sentido. ¿Puedes arreglarlo por favor? –

Respuesta

2

Depende, se necesita para guardar distintos datos para una sola categoría y para varias categorías?

Si es así, su propuesta tiene sentido ya que de lo contrario tendría campos redundantes en su modelo. Aconsejaría hacer una distinción clara entre ambos modelos (por lo tanto, no Category y Categories, sino por ejemplo SingleCategory y MultipleCategories).

Si no es, sugeriría tener un modelo para una categoría, pero con diferentes operaciones definidas para operaciones de categoría única y múltiple. Supongo que esta es tu situación.

En este último caso, puede hacer uso de una super clase abstracta Category y luego definir dos secundarios: uno que contiene operaciones para categorías individuales y uno que contiene operaciones para múltiples categorías.

5

Lo que pasa es que su modelo debe admitir el manejo de consultas de registros individuales y múltiples.

Así que mi consejo es utilizar un modelo y desarrollar sus métodos para recuperar los datos exactos que necesita.

Tener dos modelos para una sola fuente de datos sólo complica las cosas ...

+2

No estoy de acuerdo con esto, creo que el punto de la pregunta se ha perdido. En primer lugar, es una opción de diseño ya sea que su modelo contenga o no la lógica para consultar la base de datos. Algunos de los usuarios eligen separar la lógica de los objetos de negocios (el modelo de datos) y los adaptadores/servicios de datos que devuelven listas u objetos comerciales individuales. De cualquier forma, el punto es que el segundo objeto propuesto no duplica nada, simplemente reutiliza un modelo existente almacenando una colección de modelos de instancia única y algunas propiedades adicionales para obtener información sobre esa colección. Esta es una buena idea –

1

No veo ningún motivo para utilizar varios modelos para la misma recopilación de datos.

En MVC, el modelo representa la recopilación de datos: puede ser uno o varios elementos. Si el modelo específico representa solo un elemento, sigue siendo la parte de la recopilación de datos.

¿Por qué te estás preguntando sobre el uso de dos modelos separados?

0

¡Depende de USTED!

Usted es el programador que más le convenga.

Sin embargo para añadir mi razonamiento:

Una clase modelo único sería mejor en términos de legibilidad y mantenibilidad!

p. Ej.

class get_fruits 
{ 

function all_fruit(){} 

function one_fruit(){} 
} 

Esto sería muy fácil para otro programador de leer el código de entender

por ejemplo,

$get = new get_fruit(); 
$europeanfruits = $get->all_fruits("European"); 
$apple = $get->one_fruit ("Apple"); 

Espero que esto ayude!

¡Recuerde que no existe una solución correcta o incorrecta tan pronto como funcione para usted!

0

En mi opinión, listas, matrices, colecciones, etc. proporcionadas por el idioma que está utilizando son opciones válidas para colecciones de modelos, y no debería crear un modelo adicional que simplemente envuelva esta colección, ya que realmente no logra nada en absoluto. Puede considerar envolver la colección en un modelo si desea asociar alguna interfaz con la colección.

Si específicamente necesita almacenar información adicional sobre la colección, debe envolverla en otro modelo.

Tampoco estoy de acuerdo con la idea de que no deba tener varios modelos porque los datos provienen de la misma fuente de datos. De hecho, creo que no debería poner su lógica de base de datos en el modelo en sí, sino que usa un servicio separado que devuelve objetos comerciales. Este nivel de encapsulado le permite manipular los modelos de alto nivel (u objetos comerciales) en el nivel de la aplicación mientras desacopla la lógica de acceso a los datos de estos objetos. Si luego necesita ir y cambiar la base de datos por otra cosa, solo necesita reemplazar la lógica de acceso a datos y la interfaz que crea los modelos.

1

Lo que hicimos en nuestro propio MVC y ORM es que creamos un contenedor para operaciones en instancias de modelos múltiples. Que es un ResultSet. El conjunto de resultados luego puede hacer operaciones en, por ejemplo, una matriz de modelos de Categoría.

Como referencia: https://github.com/Tuxion/tuxion.cms

Cuestiones relacionadas