2012-01-11 20 views
10

La mia domanda:
Quali sono alcuni buoni esempi di schemi di progettazione utilizzati in CakePHP?
Design Patterns Used in CakePHP

Perché utilizzare CakePHP come il mio contesto
ho usato CakePHP per circa un anno in modo che sia più facile per me pensare in quel contesto. CakePHP è anche ricco di design pattern use (sono fiducioso di questo) - Non so quali pattern vengono usati a parte alcuni ovvi.

esempio libri che ho letto sul tema:
sto leggendo i seguenti libri che tutti i modelli di copertura di progettazione in un modo o l'altro; sfortunatamente usano per lo più esempi di codice Java e C++ che mi rendono più difficile afferrare gli schemi di progettazione a livello pratico (sono uno sviluppatore PHP quindi è difficile per me assorbirlo):
"Modelli di Enterprise Application Architecture ", da Martin Fowler
"Head First design Patterns", di Gang of Four (Eric Freeman, Elisabeth Freeman, Kathy Sierra & Bert Bates) (2004)
" design Patterns: Elements of Resuable Software orientato agli oggetti) ", di Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)

Esempi di modelli posso osservare in CakePHP
-Sono indovinare il file di configurazione utilizza qualcosa di simile alla fabbrica modello
-forse $ this-> params sta usando qualcosa legato al all'osservatore modello? Non sono sicuro su quel ...
-MVC (ovvio! Poiché Cake PHP utilizza la struttura dei file MVC)
-ORM (un altro molto evidente uno)
-Forse l'helper HTML sta usando il modello decorator?

Sommario
non mi aspetto che chiunque di andare giù la linea e identificare tutti i modelli utilizzati in CakePHP - sto solo cercando alcuni esempi di modelli di progettazione che dovrebbe essere ovvio che io' m mancante.

+4

La torta IMHO purtroppo usa troppi motivi. Più OO/incapsulamento/dipendenza da dipendenza/accoppiamento lento/tipizzazione anatra aiuterebbe molto nello sviluppo di applicazioni più complesse. Solo i miei 2 centesimi. – deceze

+0

ActiveRecord, associazione dati mapping, front controller e MVC. – bancer

+0

Sto iniziando a vedere come alcuni modelli di disegni si sovrappongono. Ad esempio il modello di progettazione "modello dominio" si sovrappone alla "M" in MVC. Il modello "modello di dominio semplice" ha una tabella di database per ogni oggetto dominio. Ciò si sovrappone al modello standard di CakePHP per la "M" o Modello in MVC (dove abbiamo effettivamente una classe "M-Model" per tabella di database). Un altro esempio di sovrapposizione è il pattern "front controller" in cui la "C" (controller) in CakePHP funge anche da "script di transazione" (poiché cake ha $ this-> request che gestisce $ _get/$ _ post/e $ _request. ..) –

risposta

4

Uno che viene in mente è il concetto di mixins. Non esattamente un modello, ma in realtà una funzione linguistica disponibile in alcune lingue (ad esempio moduli in Ruby) ma non in altri (ad esempio Java). Arriverà su PHP quando il 5.4 diventa stabile e otteniamo traits, ma i comportamenti del modello di CakePHP sono un buon esempio di imitazione di questo tipo di eredità multipla dove normalmente non è possibile.

class Post extends AppModel { // we can only inherit from one class 

    public $actsAs = array('This', 'That', 'Other'); // but we can do this instead 

} 
+0

Non si tratta di una limitazione di CakePHP, ma piuttosto di PHP stesso come linguaggio di programmazione? –

+0

Infatti, ma CakePHP ha reso la mancanza di questa caratteristica del linguaggio un problema, permettendoci di farlo facilmente nelle nostre app MVC fino al PHP 4. Va notato che non si tratta solo di comportamenti che sembrano mixin/tratti. ma anche i componenti del controller, gli helper della vista e le attività della shell. – deizel

+0

Il tuo punto sui mixin/eredità multipla è sicuramente degno di nota. Non avevo realizzato che il PHP 5.4 includesse i mixin: questa è una buona notizia. –

3

modelli di progettazione del software (come un RoR):

  • convenzione sulla configurazione: tutti i file di configurazione da Configura

  • Model-View-Controller: cartelle: modello, controller, Vista , ecc.

  • ActiveRecord, Associazione mappatura dati: mappatura database

  • front controller: principale punto di accesso (index.php)

Trovato nei commenti:

modelli Creazionali:

  • Singleton - Trova "getInstance, singleton "

  • Fabbrica - trova da" fabbrica "

  • Builder - trovare da "costruttore"

modelli strutturali:

  • Adapter - trovare da "adattatore"

  • Front controller (.htaccess, includere)

modelli comportamentali:

  • Strategia - Ricerca per "strategia"

Vista:

  • due fasi-view modello - "due fasi-view"