Pregunta

Tengo una aplicación, creada con MVC, que produce una vista que ofrece información resumida en varios modelos.Además de eso, se realizan algunos cálculos entre los diferentes conjuntos de datos.

No existe un modelo único claro (que se asigne al menos a una tabla) que parezca tener sentido como punto de partida para esto, por lo que los diversos resúmenes se extraen de los modelos contribuyentes en el controlador, se pasan a la vista y los cálculos se realizan allí. .

Pero eso parece, bueno, sucio.Pero se supone que los controladores son livianos, ¿no es así?Y la lógica empresarial no debería estar en las vistas, ya que la tengo presente.

Entonces, ¿dónde debería recopilarse esta información?¿Un modelo nuevo que no se asigna a una tabla?¿Una función/módulo de biblioteca?¿O algo mas?

(Aunque veo esto principalmente como una cuestión de arquitectura/patrón, estoy trabajando en Rails, FWIW).

Editar:Buenas respuestas en todos lados y mucho consenso, lo cual es tranquilizador."Acepté" la respuesta que hice para mantener el enlace a Railscasts en la parte superior.Estoy atrasado en mi visualización de Railscast, ¡algo que haré denodados intentos por rectificar!

¿Fue útil?

Solución

Como dijo Brian, puedes crear otro modelo que organice el trabajo que hay que hacer.Hay un gran Railscast sobre cómo hacer este tipo de cosas.

HT

Otros consejos

Los controladores no tienen que asignarse a modelos o vistas específicos.Su modelo no tiene que asignarse uno a uno a una tabla de base de datos.Esa es una especie de idea del marco.Separación de preocupaciones que pueden probarse todas de forma aislada.

¿Por qué no crear un modelo que no herede? ActiveRecord::Base y ejecute la lógica allí (piense en la clase Cart en Agile...With Rails).

Los controladores no tienen que ser eso ligero.

Sin embargo, si tiene algunos cálculos que solo se basan en los modelos, entonces probablemente solo necesite algún tipo de contenedor de modelo para que los modelos realicen el cálculo.Luego puede colocarlo en la API de la vista para que la vista obtenga el resultado final.

No quieres que la lógica esté en la vista.Sin embargo, usted es libre de crear una vista de base de datos.Excepto que, en lugar de crearlo en el lado de la base de datos, créelo como un nuevo modelo.Esto le permitirá realizar sus cálculos y su lógica real allí, en un solo lugar.El dolor de tratar de mantener tus vistas sincronizadas vs.el único "dolor" de crear el nuevo modelo...Voto por un nuevo modelo.

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