2009-04-16 10 views
12

Sto scrivendo un componente Cake e sembra avere senso che io lo utilizzi per il salvataggio dei dati piuttosto che farlo in un controller. Nel manuale si dice che l'utilizzo di modelli in un componente è scoraggiato, ma l'altro modo di farlo significherebbe che avrei ripetuto il codice nel controller.Best practice in CakePHP per il salvataggio dei dati, utilizzando i modelli nel componente

Il componente analizza fondamentalmente un carico di dati da varie fonti e quindi inserisce dati per vari modelli.

risposta

24

Se il componente analizza un carico di dati da varie origini, è probabile che possa essere scritto come un comportamento.

In caso contrario, e non avete altra scelta che utilizzare un modello nel componente, essere sicuri di fare in modo corretto:

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

io personalmente non vedo un problema con questo, dal momento che il nucleo componenti (come il componente Acl) lo fanno. Finché il tuo componente gestisce la logica di applicazione ei modelli gestiscono i dati , starai bene.

+1

+1 per * componente analizza un carico di dati da varie fonti, può probabilmente essere scritto come un comportamento * – Ish

3

A mio parere, DRY è il percorso critico. A tal fine, vedo due opzioni:

  1. Invece di salvare i dati nel componente, restituirlo al controller in una forma non elaborata che può essere salvata dal controller.
  2. Vai avanti e importa il modello nel componente e fai ciò che devi fare. Non è incoraggiato, ma lo rendono ragionevolmente facile.

Se si tratta di una scelta difficile, mi preoccuperei di mantenere la mia applicazione ASCIUTTA piuttosto che mantenere una rigorosa disciplina MVC.

0

Si potrebbe obiettare che se si desidera scrivere dati generati in un componente e avere la possibilità di impacchettare il componente per la distribuzione, avrebbe senso caricare un modello nel componente (specialmente se il modello fa parte del componente).

Ad esempio, ho un componente AIM (autorizzazione della carta di credito) authorize.net.

Dal mio controller chiamo la funzione di caricamento dei componenti. Authorize.net mi invia una risposta (all'interno del componente) e secondo DRY vorrei salvare i dati all'interno del componente in modo da non dover ripetere il salvataggio dei dati da qualsiasi parte venga chiamata la funzione di addebito.

Un altro vantaggio di allontanarsi dalla convenzione sarebbe il fatto che potrei utilizzare un modello all'interno del componente e non avere un modello nell'app.

Cosa ne pensi?

0

Con le versioni di Cake con cui ho familiarità con (1.3, 2.0), è possibile richiedereAzione da un altro controller. Questo a quanto pare è anche una cattiva pratica, ma forniscono la funzione per ovvi motivi. Ho usato questo in alcune situazioni, ma ho avuto risultati approssimativi quando ho cercato di passare i dati avanti e indietro. Eviterei di usare anche questo metodo, ad eccezione delle funzioni semplici.

+0

L'utilizzo dell'azione di richiesta è molto molto lento.Sarà molto negativo per le prestazioni perché Cake caricherà prima l'intero controller e tutti i suoi modelli in memoria. – Ryan

Problemi correlati