2013-06-05 11 views
5

Sto lavorando a un progetto e sono confuso sul fatto di mettere quale codice dove. Qui metterò un semplice esempio per mostrare perché sono un po 'confuso.Componenti Cakephp VS Libs e shell

Immaginate diverse pagine Web in un'applicazione cakephp in cui, in un modo o nell'altro, è possibile creare un account - insieme a questo account, è necessario chiamare diverse altre funzioni di entrambi i modelli e librerie (ad esempio zip qualcosa, creare un certificato per account, ...).

Visto che deve essere fatto in diversi luoghi e non abbastanza appartiene nel Modello (+ è un po 'di codice), il modo migliore è quello di utilizzare i componenti ho pensato.

Questa grande opera, fino a quando si è dietro un server web, ma cosa succede se voglio anche avere tutto ciò che le funzionalità disponibili in una Shell? - Quindi non posso usare componenti e posso caricare solo libs.

Questo è il caso per tutto il codice funzioni/php posso/voglio condividere, per avere ogni logica disponibile in entrambi i gusci come nei controllori.

Arrivano le domande :) => Così tutti i miei componenti devono essere libs ?, è architettonica corretto per caricare modelli/altre librerie ecc all'interno di quelle librerie ?, che cosa è l'uso di componenti allora ?, come potrebbe bene 'rm -rf' loro e usa solo libs?

Fino ad ora il modo in cui ho usato componenti, è quello di mettere tutta la logica di processo che può/deve essere condivisa tra i controller in loro. Libs Ho usato quando non ho bisogno di alcun modello o solo una raccolta di funzioni statiche (esempio per manipolare le immagini). In questo modo, ho raggiunto un muro in cui desidero/ho bisogno di accedere alla logica di quei componenti quando utilizzo gli script di Shell.

Qualche idea su dove la mia comprensione vada storta?

risposta

4

Avete già dato tutte le risposte da soli!

Sì, i componenti sono lì per condividere la funzionalità tra i controller. Solo controller. Quindi se avete bisogno di quella funzionalità in un modello o in una shell, che è fuori posto.

Si dovrebbe mettere il codice, che viene utilizzato sia il mio guscio e il controller nello strato del modello (se il suo modello/db correlato) o libs (roba statico/calc etc). Quindi quelli possono essere utilizzati da entrambi i lati.

È possibile utilizzare i modelli in lib e vica versa. Basta fare attenzione a non creare troppe dipendenze e relazioni cicliche. Anche questi sono difficili da testare/estendere/modificare.

I componenti sono utili per avvolgere quei metodi lib/model per un accesso al controller rapido e conveniente e anche per eseguire una gestione più automatica e specifica del controller. Simile a SessionComponent che avvolge solo la classe CakeSession per fornire un accesso facile alla sessione nel controller.

A proposito: lo stesso wrapping della convenienza si può fare anche nell'ambiente della riga di comando usando Task. Questi non sono nient'altro che "componenti per shell".

+0

Grazie per aver verificato i miei pensieri iniziali! Non volevo inserire il codice nelle posizioni sbagliate in quanto mi ostacolerebbe nello sviluppo/espansione successivo. – Crazy