2009-04-16 21 views
12

Estoy escribiendo un componente Cake y parece tener sentido que lo use para guardar datos en lugar de hacerlo en un controlador. En el manual se dice que se desaconseja el uso de modelos en un componente, pero la otra forma de hacerlo significaría que repetiría el código en el controlador.Mejor práctica en CakePHP para guardar datos, usando modelos en el componente

El componente básicamente analiza una carga de datos de varias fuentes y luego inserta datos para varios modelos.

Respuesta

24

Si el componente analiza una carga de datos de varias fuentes, probablemente se pueda escribir como un comportamiento.

Si no es así, y que no tienen otra opción que utilizar un modelo en su componente, asegúrese de hacerlo correctamente:

$this->ModelName = ClassRegistry::init('ModelName'); 

Yo personalmente no veo un problema con esto, ya que el núcleo componentes (como el componente Acl) hacen eso. Siempre que su componente maneje la lógica de aplicación y los modelos manejen datos, estará bien.

+1

+1 para * componente analiza una carga de datos de varias fuentes, probablemente se puede escribir como un comportamiento * – Ish

3

En mi opinión, DRY es la ruta crítica. Para ello, veo dos opciones:

  1. En lugar de guardar los datos en el componente, devuélvalos al controlador en un formato sin formato que se pueda guardar desde el controlador.
  2. Siga adelante e importe el modelo en el componente y haga lo que debe hacer. No es recomendable, pero lo hacen razonablemente fácil.

Si se trata de una elección difícil, me gustaría mantener mi aplicación seca en lugar de mantener una estricta disciplina de MVC.

0

Podría argumentarse que si desea escribir datos generados en un componente y tiene la capacidad de empaquetar el componente para su distribución, tendría sentido cargar un modelo en su componente (especialmente si el modelo es parte de su componente))

Por ejemplo, tengo un autor de AIM (autorización de tarjeta de crédito) componente.

Desde mi controlador llamo a la función de carga de componentes. Authorize.net me envía una respuesta (dentro del componente) y de acuerdo con DRY me gustaría guardar los datos dentro del componente para no tener que repetir el guardado de los datos desde donde se llame a la función de carga.

Otra ventaja de alejarse de las convenciones sería el hecho de que podría usar un modelo dentro del componente y no tener que tener un modelo en la aplicación.

¿Qué opinas?

0

Con las versiones de Cake estoy familiarizado con (1.3, 2.0), puede solicitar la acción de otro controlador. Esto aparentemente también es una mala práctica, pero proporcionan la función por razones obvias. Lo he usado en algunas situaciones pero he tenido resultados incompletos al intentar pasar datos de un lado a otro. Evitaría usar este método también, excepto para funciones simples.

+0

El uso de la acción de solicitud es muy lento.Será muy malo para el rendimiento porque Cake cargará primero todo el controlador y todos sus modelos en la memoria. – Ryan

Cuestiones relacionadas