CakePHP: trigger di automazione dopo il salvataggio: il migliore è stato eseguito come componente o comportamento?

4

Gente, la prima volta su CodeReview - cerca solo qualche input per creare un po 'di automazione in CakePHP, chiedendoti se è meglio usare un componente o un comportamento. È guidato dal modello ma coinvolge la logica e l'elaborazione. Ecco lo scoop:

L'app che sto creando richiede che l'utente venga informato quando un modello soddisfa determinate condizioni; inoltre, potrebbe essere necessario modificare i dati nel modello interessato o in un modello correlato. Ad esempio, se un modello cliente viene salvato con un determinato stato / provincia, assegnare tale cliente a un rappresentante vendite (modificando un campo relazionale) e notificarlo tramite un Growl o un'e-mail. Quindi è sicuramente guidato dai dati, suggerendo un comportamento, presumibilmente afterSave ()

Ma richiede anche logiche e altre utilità tipicamente non utilizzate nel modello o nel comportamento (e-mail, ad esempio, Sessione / configurazione del sistema / preferenze utente) - funzionalità tipicamente presente in un controller / componente e non facilmente disponibile per un modello o comportamento.

Quindi è meglio sviluppato come un comportamento o un componente?

Qualche consiglio su come avvicinarsi a Cake Guru è molto apprezzato.

Grazie in anticipo.

    
posta optimumdarren 13.08.2013 - 17:48
fonte

1 risposta

1

Modello e comportamento sono esattamente la stessa cosa. Un comportamento estende la funzionalità di un modello. La scelta tra ciò sta nella complessità e nella riutilizzabilità. Se non sai cosa è meglio, puoi pubblicare una domanda a parte con il codice corrispondente per definire quale sia la soluzione migliore.

The app I'm creating requires the user to be notified when a model meets certain conditions

Per questo tipo di notifiche dovresti guardare il sistema Eventi di CakePHP. Ciò creerà la separazione che desideri avere.

In generale significa che controlli la condizione nel tuo modello (o comportamento) e lanci un Evento quando le condizioni sono soddisfatte. Altro codice risponderà a quell'evento e gestirà l'invio della notifica ecc.

Il listener di eventi potrebbe quindi essere modificato, ad esempio: per motivi di prestazioni, potresti voler inserire la notifica in una coda per scaricare il lavoro in modo che la risposta diventi più veloce.

additionally data in the affected model or a related model might need to be changed. assign that customer to a sales rep (by changing a relational field)

Questo è più qualcosa da fare direttamente nel modello o nel comportamento. Non implementerei un evento qui direttamente. Potresti collegarlo per esempio in prima di validare. Assicurati che sia richiesto salesrep_id. Poi nel tuo codice controlli quale scegliere e inserisci l'ID giusto.

In questo modo un cliente viene assegnato a un rappresentante di vendita e viene convalidato.

Se il codice per la selezione di un rappresentante di vendita è complesso o deve essere riutilizzato, puoi separarlo anche in un comportamento.

[modifica] altro sul sistema degli eventi: link

    
risposta data 03.04.2014 - 12:08
fonte

Leggi altre domande sui tag