Architettura / design dell'applicazione Web PHP [chiuso]


20

Sono stato investito in prima persona in un nuovo lavoro nello sviluppo di applicazioni Web in PHP. Non sono assolutamente nuovo a PHP, ma non ho mai sviluppato applicazioni su larga scala. Mi chiedo come strutturare il mio sviluppo per evitare di affrontare problemi futuri. Come posso progettare e progettare le mie applicazioni in modo efficace che consenta loro di ridimensionarsi nel tempo in termini di funzionalità e prestazioni. Sto pensando a cose come:

  • Separazione della parte posteriore dalla parte anteriore
  • Strutture di directory

Gradirei puntatori a modelli, framework e metodi di progettazione architettonica e applicativa che mi permettano di affrontare lo sviluppo di applicazioni Web PHP su larga scala in modo sostenibile.


Ciao! L'architettura più comune per le applicazioni Web è MVC , per PHP e ogni altra piattaforma Web popolare. Detto questo, dovresti leggere le nostre FAQ . Sebbene l'architettura del software sia in tema, è necessario rivedere la domanda per essere un po 'più specifici. Una "discussione salutare sull'architettura generale" non si adatta al formato di domande e risposte del sito.
yannis,

Sono un frequente visitatore dei siti S / E, ho avuto la sensazione che non ci sarebbe stata una risposta a questa domanda, quindi il commento "discussione". Grazie per il puntatore MVC però :)
Brad Morris il

Risposte:


29

Un diagramma approssimativo dell'architettura dell'ultimo progetto su larga scala in cui sono stato coinvolto.

inserisci qui la descrizione dell'immagine

È solo uno schema di base, adattato dagli attuali documenti di architettura e presentato in un modo che ricorda un tipico approccio di livello n combinato con un tipico approccio MVC . Come puoi vedere, i livelli logici e di dati sono collegati tramite un livello di servizio, e più precisamente un'API REST , ispirata a Recess , un framework PHP meno conosciuto.

Non reinventare la ruota

Lavoro con tre framework:

  • Zend Framework

    Il colosso dei framework PHP, con una base di codice straordinariamente ben scritta e un ampio elenco di funzionalità. Su applicazioni su larga scala ti ritroverai a modificare il framework il più delle volte, e trovo la base di codice di ZF la più piacevole con cui lavorare. Ma attenzione, non è un framework entry level .

  • Kohana

    Kohana è iniziato come un fork di CodeIgniter, e questa era una ragione sufficiente per non usarlo inizialmente. Oggi è cresciuto in un quadro solido ed elegante che si differenzia dagli altri seguendo un approccio gerarchico MVC . HMVC consente una maggiore estensione della modularizzazione rispetto a MVC . Per il progetto nel diagramma ho adattato l'HMVC di Kohana a ZF, ma ho iniziato a usare Kohana per progetti più piccoli e considerandolo anche per quelli più grandi.

  • CodeIgniter

    Lo uso solo a causa di un progetto legacy che ho ereditato, evitalo se possibile.

Come sottolineato dalle altre risposte, un ORM è sempre utile. Uso ampiamente Doctrine e dovresti dare un'occhiata ai suoi nuovissimi mappatori per CouchDB e MongoDB . La scalabilità è un must per le applicazioni su larga scala e dovresti valutare le soluzioni NoSQL .

Detto questo, la cosa importante da ricordare è che le applicazioni più grandi di solito hanno sfide uniche. Dovresti valutare ogni popolare soluzione di terze parti che esiste e probabilmente otterrai molto da un paio di oscure. Quando ho valutato Recess per la prima volta, era lungi dall'essere pronto per la produzione, ma il suo approccio essenzialmente lo ha inserito nel progetto.

Prestazione

Sui siti Web tipici è possibile cavarsela con la semplice memorizzazione nella cache dell'output e la cache del codice operativo, ma su applicazioni su larga scala si dovrebbe davvero prendere in considerazione la memorizzazione nella cache, che più comunemente si basa su memcached .

xdebug è principalmente noto come debugger, ma può anche fungere da profiler . Di recente ho iniziato a utilizzare Zend Server e adoro le sue funzionalità di tracciamento del codice . Purtroppo quelli non sono disponibili nella Community Edition , ma xdebug è un'alternativa abbastanza decente.

Se stai usando Apache, assicurati di ottimizzarlo . nginx e lighttpd sono scelte apparentemente migliori , per quanto riguarda le prestazioni, ma non le ho usate molto e non posso davvero dirlo.

Per quanto riguarda il database, la query e la cache dei risultati di Doctrine fanno miracoli, specialmente se combinati con memcached . E, naturalmente, non possiamo dimenticare il front-end. Il team di prestazioni eccezionali di Yahoo ha raccolto un ampio elenco di migliori pratiche . Non sono uno sviluppatore di front-end, ma ho visto risultati sorprendenti in progetti solisti.

Infine, PHP ha un nuovissimo meccanismo di raccolta dei rifiuti , che vale la pena esaminare.

Sicurezza

Il mondo della sicurezza di PHP è caotico, per non dire altro. Non sono un esperto, quindi tratta i seguenti suggerimenti generici:

  • Aprire il progetto di sicurezza delle applicazioni Web

    C'è un sacco di roba buona lì dentro, ma per una rapida panoramica dovresti iniziare con la lista dei primi dieci . E ricerca soluzioni PHP per quelle vulnerabilità comuni.

  • Stack vulnerabilità

    Una buona abitudine è monitorare periodicamente i bug aperti di PHP . Anche se non sei un esperto, ci sono quasi sempre dei suggerimenti per aggirare le minacce alla sicurezza. E, naturalmente, dovresti estendere l'abitudine a tutte le altre parti dello stack, in particolare a quelle più vulnerabili, come il web server e il database.

Il pubblico di IT Security Stack Exchange può aiutarti con risposte più istruite.

Ulteriori letture


1
Bella risposta; ottima presentazione; ottimo layout ... Ottimo lavoro!
Dinamico

@Jae Grazie! Hai letto tutto? : P È un po 'lungo, mi chiedevo se avrei dovuto potarlo un po'.
yannis,

Ah, ci ho provato! ;-)
Dinamico

In realtà Yannis, ho una domanda per te. Di recente mi sono molto interessato a PHP. Ho cercato di impararlo da solo, ma ho un po 'di problemi. Sembra anche che tu sia abbastanza bravo con PHP :-). Ti dispiacerebbe condividere un po 'di guida? In tal caso, creerò una chat room.
Dinamico

Questo è esattamente il tipo di risposta che stavo cercando! È un sacco di informazioni da prendere, penso che dovrò fare un po 'di assorbimento e armeggiare nell'ora successiva, ma mi hai dato un punto da cui cominciare. Grazie :)
Brad Morris,

1

Il sito Web di IBM Developerworks ha una grande pila di articoli PHP , molti dei quali abbastanza buoni. Hanno una serie di articoli che confrontano i framework Web PHP e un'altra serie sui siti Web che utilizzano il framework CakePHP .

Il vecchio sito Web "Onlamp" di O'Reilly ha un articolo su MVC in PHP . L'autore dell'articolo ha continuato a spiegare MVC in dettaglio .

Gli articoli di O'Reilly sono un po 'vecchi, ma ti faranno andare avanti. Il materiale IBM Developerworks è davvero buono e copre molto di ciò che stai chiedendo.


1

Lavoro in PHP da alcuni anni. Anche se sono d'accordo con Yannis che questa domanda è in qualche modo aperta, penso che ti darei alcuni suggerimenti. Innanzitutto, come ha detto Yannis, dovresti esaminare MVC, per fare ciò, i due framework che posso consigliare sono CodeIgniter e Symfony . Il primo è leggero e molto facile da iniziare, tuttavia, potresti solo aver bisogno di aggiungere alcune personalizzazioni extra per far funzionare una buona configurazione, ci entreremo presto. Symfony è un progetto avviato da Fabien Potencier che utilizza molti dei modelli di progettazione nell'ingegneria del software, tuttavia la curva di apprendimento è molto più ripida di quella di CodeIgniter .

Ora, in secondo luogo, dovresti esaminare la connessione al database, che mi porta nei due più importanti framework ORM per PHP, Doctrine e Propel . Personalmente amo Propel e ho anche scritto su come configurare un'installazione Propel pulita su un'app basata su CodeIgniter , tuttavia, Symfony è più in Doctrine , ma usiamo entrambi. Se vuoi saperne di più su Doctrine e Propel , dai un'occhiata a questa domanda che ho posto qualche tempo fa.

Infine, dovresti esaminare un framework di modelli , come Smarty , Dwoo o Twigg . Smarty è la più antica e quindi la più stabile. Dwoo eredita da Smarty e aggiunge una o due cose per supportare meglio OOP su PHP 5. Infine, Twigg è l'alternativa allettante fornita dal team di Symfony , non lo vedo io stesso, ma se proviene dal team di Symfony dovrebbe essere bello .

Spero che tutto questo discorso abbia un senso, David

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.