2009-04-18 12 views
22

Sono principalmente alla ricerca di buone pratiche di sviluppo specialmente quando si lavora in combinazione con mysql. Ho cercato tra le domande ma non ho trovato nessuna domanda correlata. Gradirei se qualcuno condividesse le proprie pratiche e la saggezza acquisite attraverso l'esperienza.Quali sono alcuni dei migliori modelli e pratiche per lo sviluppo di PHP?

Oltre ad alcuni standard di codifica, sono anche alla ricerca di standard di progettazione e pratiche architettoniche comuni.

Contesto: Ho iniziato la mia carriera con Java, e nel corso degli anni mi sono spostato nello spazio C# /. NET. Ho praticato l'architetto per oltre 3 anni. Ho appena aggiunto questo per dare un'idea alle persone.

risposta

26

Ti suggerirei di familiarizzare con la storia di PHP, so che così facendo mi ha dato un apprezzamento molto maggiore di ciò che PHP è oggi e da dove proviene.

In breve, Rasmus Lerdorf ha scritto PHP per fornire semplici funzioni di wrapper per il codice C che stava effettivamente facendo il lavoro pesante in modo che potesse avere una lingua/sintassi più semplice per scrivere modelli che dovevano comportarsi dinamicamente. La crescita di PHP e della comunità che lo circonda è meglio descritta come organica. E molto simile ad altre cose che crescono organicamente, è più che un po 'disordinato, asimmetrico e decisamente non congruente.

Una volta compreso il PHP e la sua comunità, è necessario abbracciare PHP per tutto ciò che è e tutto ciò che non è. Questa idea è stata presentata al meglio da Terry Chay nel suo articolo PHP without PHP.Sta parlando specificamente del concetto di cache funky, ma coglie il concetto di codifica per PHP come se fosse PHP e non (inserire qui il linguaggio preferito) meglio di chiunque altro io abbia mai visto. In altre parole, non provare a creare PHP in Java, C#, Ruby, ecc. Perché se lo fai fallirai e ti odierà la vita.

Dai uno sguardo allo How is PHP Done the Right Way?.

Devo dire che è necessario, prima, e sempre evitare la tendenza della maggior parte degli sviluppatori PHP che iniziano a utilizzare l'anti-pattern di spaghetti code. In altre parole, se trovi che stai scrivendo codice che contiene query SQL, manipolazione di dati, convalida di dati e output HTML tutto in un singolo script php, allora stai sbagliando.

Per evitare questo, sarà utile imparare qualcosa sulla natura dei modelli di progettazione orientati al web. Questo ovviamente preclude una familiarità con la programmazione orientata agli oggetti. Ma una volta che hai imparato le basi della programmazione orientata agli oggetti in PHP, studia il modello di progettazione MVC. Non è necessario implementarlo esattamente, ma l'utilizzo delle idee di base di Model-View-Controller consente di evitare il problema del blob script che la maggior parte dei neofiti tende a creare.

Su questo punto, ti consiglio vivamente di prendere qualsiasi frammento di codice che trovi sul web con un pizzico di sale. E anche se lo trovi in ​​un libro, devi considerare quanti anni ha il libro. Il PHP come lingua ha fatto passi da gigante e non puoi semplicemente prendere campioni di codice al valore nominale perché, a seconda dell'età, potrebbero utilizzare soluzioni alternative valide per 3.xo 4.x ma semplicemente non sono più necessario con nuove funzionalità.

Una grande cosa da fare è studiare le varie strutture là fuori. Valuta ciò che ti piace e ciò che non fai. Forse persino elaborare ciascuno dei quickstart forniti con la documentazione del framework in modo che tu possa iniziare a farti un'idea di ciò che ti piace e che non ti piace. E raccomando vivamente di rivedere il codice dai framework così come molti altri progetti open-source in modo che tu possa avere un'idea di come gli altri fanno cose in PHP. Ancora una volta, prendi tutto con un pizzico di sale perché ogni sviluppatore di PHP ha le proprie sfumature e pet pet e nessuno di noi ha sempre ragione. In effetti, la maggior parte delle volte con PHP ci saranno diversi modi per fare qualcosa.

Se si desidera ottenere una migliore comprensione degli schemi che vengono implementati dai framework e vengono comunemente gettati nel volgare in comune su SO, suggerirei di leggere Fowler e GoF. Insegneranno tutto sui modelli di progettazione di base che userete nei vostri sforzi di sviluppo.

Specificamente guardare per i seguenti: file

  • funzione che contengono un sacco di funzioni. Probabilmente questo è rappresentativo della necessità di mettere le funzioni direttamente negli script che ne hanno bisogno o potrebbe anche indicare un'opportunità per creare alcune funzioni più generiche che possono essere fatte per adempiere ai ruoli di un paio di funzioni altamente specifiche. Ovviamente, se crei classi coese e ben incapsulate, non dovresti incorrere in questo problema.
  • Il fare tutto classe. Questo è un blob anti-pattern ed è davvero antipatico. In questo caso è necessario identificare dove coesione e incapsulamento si stanno abbattendo e utilizzare quei punti come opportunità per suddividere la classe in diverse classi più piccole e più manutenibili.
  • Query SQL che non utilizzano query con parametri o almeno parametri di escape. Molto, molto, molto male.
  • Qualsiasi istanza in cui la convalida non viene eseguita o viene eseguita solo lato client.Quando si sviluppa per il Web, l'unico modo per tenere al sicuro il tuo sito e i tuoi utenti è quello di presumere che tutti gli altri sono un cappello nero.
  • Un desiderio improvviso e ossessivo di utilizzare un motore di template. PHP è un linguaggio di template. Assicurati di avere chiare ragioni per aggiungere un altro livello al tuo sito Web prima di utilizzare un motore di template.

Per ulteriori approfondimenti si prega di guardare il seguente:

PHP Application Design Patterns
Defend PHP - utile per dare un'idea delle critiche più comuni.
Security of strip_tags and mysqlirealescapestring
What should Every PHP Programmer Know
How to Structure an ORM
Best Way to Organize Class Hierarchy
Main Components/Layers of PHP App
Why use Framework for PHP
Recommended Security Training for PHP

+1

Mi piace come si avvisa per i motori di modelli. Non ho mai veramente capito perché le persone lanciassero un motore di template in un linguaggio che a sua volta era stato progettato come un linguaggio modello. –

+0

Hi Gabriel, Grazie per la risposta dettagliata. Apprezzo molto il tuo pensiero. Conosco molto bene tutti gli schemi di progettazione. Ho iniziato la mia carriera con Java e poi mi sono trasferito al mondo C# e ASP.NET. Ho usato la maggior parte degli schemi di progettazione, ove appropriato. Ora come architetto, voglio mettere in atto alcune buone pratiche e le metodologie di codifica in quanto ho alcune app di php insieme alle app .net. Non voglio imporre le stesse restrizioni su PHP per le ragioni che hai menzionato sopra. –

+0

quindi stai dicendo che usare modelli come SMARTY è solo una perdita di tempo ed energie? –

10
  • Utilizzare uno standard di codifica.
  • Utilizzare il test dell'unità. PHPUnit e SimpleTest sono i principali sistemi xUnit in PHP.
  • Essere orientato agli oggetti.
  • Utilizzare il controllo della versione. Qualsiasi controllo di versione, basta usarlo.
  • Se applicabile, utilizzare un framework. Zend, CodeIgniter, Symfony e CakePHP sono i più importanti.
  • Se nessun framework, almeno utilizza un ORM. Propel e Doctrine sono i maggiori.
  • Documento. Pesantemente. Usa PHPdoc o simili.

Ci sono molti strumenti disponibili per PHP. Si prega di usarli e scrivere un buon codice mantenibile. Renderai tutti più felici.

3

Utilizzare PDO o mysqli. L'utilizzo di uno di questi ti darà dichiarazioni preparate, che sono più sicure e più efficienti. Non posso credere a quanti esempi e tutorial vedo usando le antiche interfacce mysql. I PDO renderebbero molto più semplice il passaggio a un altro sistema di database, se decidessi di provare Postgres, ad esempio.

Si potrebbe esaminare usando Doctrine (http://www.doctrine-project.org). Ha un po 'della propria curva di apprendimento, ma offre funzionalità molto convenienti. Le parti più maneggevoli, per me, sono le funzioni di caricamento dei dati di creazione/test della tabella. Personalmente, preferisco scrivere il mio SQL ed eseguirlo con PDO, e non usare un ORM molto in produzione.

Principalmente, informazioni su SQL e MySQL. http://www.kitebird.com/mysql-book/ questo libro è eccellente. L'aspetto di PHP non è molto intenso; DOP si occupa della maggior parte di esso.

0

vostro da un background di Java, e gran parte della roba OO in PHP è molto Javaesque. Ciò significa che molti dei modelli di progettazione che (si spera) hanno imparato in Java si applicano anche (in misura minore) in PHP. Un esempio per l'accesso al database sarebbe il pattern DataMapper.

Problemi correlati