2009-11-18 2 views
6

Desidero sapere quali strategie di architettura php gli sviluppatori utilizzano in complesse applicazioni php. Finora, conosco la struttura del mvc che consiste in modelli, viste e controller (e plugin del controller che gestiscono compiti comuni come il controller di accesso utente). Conosco alcuni buoni framework php che rendono più semplici alcune cose comuni. Ma il problema inizia quando mi occupo di applicazioni php enormi e complesse. perché in queste applicazioni ci sono molte cose da fare o molto da pensare, quindi non posso decidere quale codice dovrebbe essere dove.Architettura di applicazioni php molto complesse?

Pensa all'applicazione magento, questa è un'applicazione molto grande. quando ripasso il codice sorgente dell'applicazione, non riesco a capire la strategia di progettazione. so che ci sono alcune strategie di progettazione perfette in grado di gestire facilmente applicazioni php di grandi dimensioni, perché non possono costruire un'applicazione così grande con una strategia di progettazione molto debole. La strategia di progettazione dovrebbe supportare più di quello che vuoi, così puoi migliorare il tuo codice e applicazione facilmente

Per riassumere, voglio come posso creare applicazioni più grandi. Ora le strategie di progettazione che uso nelle mie applicazioni mi limitano, quindi non posso creare applicazioni più complesse. Voglio sapere quale strategia di progettazione può gestire applicazioni complesse.

so che questa è una domanda molto astratta, ma questo è perché ora il mio background php proviene da hobby amatoriale non accademico. Voglio fare di più, ma sono da qualche parte dove non posso fare un passo in più, perché non riesco a trovare informazioni più complesse sulla codifica. qualunque cosa, per riassumere, voglio conoscere le strategie di progettazione per applicazioni PHP complesse come Magento.

Forse le strategie di progettazione che conosco (MVC, quadri torta CI ...) in grado di gestire le applicazioni più complesse di quanto io pensi ..

se ci sono alcuni errori nella mie domande non esitate a correggerli, scusa per il mio inglese inadeguato ..

risposta

7

Credo che parte del tuo problema potrebbe risiedere nel fatto che la creazione di applicazioni aziendali è un problema in qualsiasi lingua, e gli schemi di progettazione che possono essere implementati sono in realtà indipendenti dal linguaggio.

Consiglio vivamente di familiarizzare con Patterns of Enterprise Application Architecture di Martin Fowler. Questo è il lavoro fondamentale per tutti gli altri libri che in seguito raccoglierai che coprono gli stessi concetti in un formato specifico della lingua e se vuoi veramente capire cosa è necessario per creare applicazioni robuste e scalabili sul web allora avrai bisogno per familiarizzare con questo libro.

Una strategia di progettazione molto comune e popolare con le applicazioni Web in questo momento è il paradigma Model-View-Controller. Ciò deve avvenire completamente con la separazione delle preoccupazioni nell'applicazione in modo che non si mischi il codice di accesso al database con l'output html.

Per un buon trattamento dell'argomento, suggerisco di guardare here (specifico per Zend Framework ma copre bene l'argomento generale) e here per una discussione sui Modelli in particolare. O se vuoi dare un'occhiata a un tutorial MVC PHP più generalizzato, Rasmus Lerdorf ha one.

Oltre a questo (e ancora una volta è possibile apprendere da PofEAA di Martin Fowler) è necessario conoscere la mappatura relazionale oggettuale quali sono i punti di forza e di debolezza dei vari modelli di progettazione.

Sfortunatamente ci sono molti buoni modi per fare le cose a seconda delle esigenze, ma per ogni buon motivo ci sono circa un milione di modi orribilmente sbagliati per loro.

+0

Grazie per la risposta.il link che hai dato è molto utile per me. ho appena capito il mio punto debole, il mio problema è "fat controller = model + controller". Penso che limiti le mie applicazioni è che non ho alcun modello 'utile', i miei modelli sono solo classi vuote con l'adattatore del database framework e Ho enormi controller che hanno tutta la logica in esso. Quindi penso di dover creare modelli reali –

+0

. Ma non sono sicuro del motivo per cui ho bisogno di creare azioni specifiche del modello (ad esempio azione del registro del modello utente) anche se lo userò in un solo controller. una ragione che posso trovare è testare le capacità. se il modello utente ha un metodo di registrazione, posso verificarlo. se hai più informazioni che possono essere utili per me, voglio imparare. Grazie ancora –

+0

@Oguz - Hai familiarità con Do not Repeat Yourself, Single Responsibility Principle o incapsulamento in quanto riguardano la programmazione orientata agli oggetti? –

1

È davvero una domanda molto astratta e "molto complessa" non è molto specifica. Quando sento persone che parlano di applicazioni "complesse" lo associo a

a) Qualcuno sta usando un'architettura complessa per un semplice problema. Per esempio. utilizzando ogni schema e struttura del design che suonasse cool.

b) Qualcuno ha provato a eliminare tonnellate di casi d'uso completamente diversi in un'applicazione storicamente sviluppata, creando e utilizzando interfacce proprietarie e non documentate e accoppiando tutto quanto strettamente il più possibile insieme. Sfortunatamente, CAN può costruire applicazioni enormi con una cattiva strategia di progettazione e questo è ciò che le rende complesse.

c) di impianti preesistenti e l'integrazione legacy System (ok vedi b)

Magento può essere una grande applicazione, ma il quadro di fondo è ancora il Zend Framework, soprattutto la parte MVC. Quindi leggere la documentazione di Zend_Framework ti aiuterà molto a capire l'architettura di Magentos (non lo consiglio al contrario cercando di scavare nel Zend Framework attraverso l'origine di Magento). Consiglierei di iniziare effettivamente a creare un'applicazione più grande con uno dei framework MVC, perché è il modo migliore per imparare l'architettura, i suoi vantaggi e dove sono i limiti.

2

Quali strutture hai esaminato? Esamina symfony, Zend Framework e CakePHP se non lo hai già fatto. E, per esempio, intendo in realtà scrivere applicazioni di medie dimensioni usando questi framework. Basta leggere il codice spesso non è sufficiente per capire come funziona. Spesso devi usarlo e provare a modificarlo.

Si potrebbe anche voler controllare il libro PHP 5 Objects Patterns and Practice per alcune idee di strategie di progettazione che è possibile applicare alla vostra applicazione. Puoi anche imparare un bel po 'studiando quadri scritti in altre lingue. I progettisti di molti framework PHP sono stati fortemente ispirati da Ruby on Rails, ad esempio.

1

Se non lo hai già fatto, dovresti esaminare la programmazione orientata agli oggetti. C'è un ottimo tutorial su questo here. Penso che questa sia forse la cosa più importante che le grandi app web fanno non è necessariamente intuitiva per il dilettante (me compreso). Il trucco nei framework MVC come Code Igniter è creare una serie di classi (o oggetti) come modelli o librerie.

+0

Parlerebbe di schemi di progettazione se non conoscesse l'OOP? – MiseryIndex

0

Bene, anche se la tua domanda riguarda tutto il PHP ... Se gestisci il tuo contenuto statico come immagini con PHP, risulterà scarso rendimento indipendentemente dall'utilizzo di MVC o meno. Dovresti usare front-end come nginx per queste cose.

guarda http://highscalability.com/ storie vere dalla vita reale!

Nota anche NoSQL.

0

Ho cercato di capire il tuo problema e ho scoperto che l'architettura di Magento è molto potente ma complicata. Ho ottenuto una soluzione tramite Zendfox, È un framework di applicazioni Web, adatto per lo sviluppo di applicazioni di piccole o grandi dimensioni. Ha un'architettura applicativa molto carina che può essere gestita molto facilmente. Ha anche lo sviluppatore di moduli per creare moduli personalizzati per zendfox in pochi minuti tramite lo strumento basato su procedure guidate.

Così un'occhiata a: http://www.zendfox.com