2010-03-10 9 views
8

Singleton, Decorator, Abstract, Factory e l'elenco potrebbe continuare. Quanto sono rilevanti i modelli di progettazione OO nello sviluppo di applicazioni PHP per il web? Fa qualcosa per le prestazioni? O è solo per mantenere il codice snello per pratiche di sviluppo agili? Chi è il principale benefattore per l'implementazione di questi modelli di progettazione? È il cliente o lo sviluppatore?Quanto sono rilevanti i modelli di progettazione OO per lo sviluppo web in PHP?

Mi rendo conto che sto facendo più domande, ma tutte riguardano lo stesso argomento. Non sono sicuro che esista una necessità per i modelli di progettazione OO con un linguaggio di scripting poiché è compilato in fase di esecuzione. Che cosa ne pensate? È importante?

risposta

9

Gli schemi di progettazione vengono creati per risolvere problemi specifici. Questi problemi si verificano sia che tu usi PHP o qualsiasi altra lingua (anche se i modelli possono differire anche per lingua). La maggior parte degli schemi ha le sue radici nella progettazione orientata agli oggetti, ma può essere adattata alle impostazioni procedurali. Usa lo schema di progettazione quando hai un problema a cui il pattern si rivolge, sia PHP che qualsiasi altra lingua. Non utilizzare un modello di progettazione solo perché è un "modello di progettazione" - sapere come e quando si applica e quando non lo fa.

Detto questo, gran parte di ciò che i modelli di progettazione fanno, è organizzare il codice per raggiungere il loro scopo in modo pulito e comprensibile. Esistono altri modi per risolvere il problema, ma il modello di progettazione è un metodo ben riconosciuto, chiaro e comprensibile. Se hai bisogno di risolvere un problema affrontato da un particolare modello, solitamente preferisci utilizzare il modello (o adattarlo al modello) piuttosto che scegliere un'alternativa.

L'utilizzo di modelli, se del caso, è quindi vantaggioso per gli sviluppatori attuali e futuri - codice più chiaro e comprensibile - e per il cliente - meno tempo per reinventare la ruota, codice più robusto e manutenibile. Usare schemi quando non sono appropriati non giova a nessuno; è potenzialmente un esercizio di frustrazione cercando di adattare un modello per risolvere un problema non correlato e molto probabilmente renderà le cose più complicate.

+0

Ottima risposta! c'è ovunque sul web dove puoi trovare tutorial su come imparare a riconoscere gli schemi e quando usarli? Qual è il modo migliore per impararli? –

+0

C'è un libro dei ragazzi di PHP | Architect su Design Patterns in PHP, che ho trovato utile poiché spiega come ciascuno dei pattern funziona nel contesto della lingua. Imparare a riconoscere cosa sono e quando usarli ... questo è un po 'più difficile, si tratta solo con la pratica. –

+0

Il libro Gang of Four (http://c2.com/cgi/wiki?DesignPatternsBook) è un buon punto di partenza, ma le implementazioni dovrebbero essere tradotte in PHP. Il formato degli stessi schemi ti dice quale problema risolve il modello. Un buon punto di partenza sarebbe la voce wikipedia: http://en.wikipedia.org/wiki/Design_Patterns – tvanfosson

1

Sì, ma è necessario scegliere i modelli giusti per la piattaforma. Di gran lunga il modello di progettazione OO più importante è MVC (Model-View-Controller), che utilizza tutti i principali framework (CakePHP, CodeIgniter, ecc.).

+0

Io sono un grande fan di CakePHP e MVC in generale. Credo che sia sicuro per la struttura del codice. Ma MVC è un modello di progettazione o un'architettura? O è anche modello/architettura? –

+0

Può essere discusso se si tratta di un modello architettonico o di un progetto, ma MVC è un modello così fondamentale per lo sviluppo moderno del web - per organizzare il codice, renderlo più modulare, manutenibile, ecc ... –

+0

Sono d'accordo, mi piace usare MVC . Semplicemente rende tutto più facile. –

1

Utilizzando un OOP vs un approccio non-OOP ci può essere una leggera differenza di performance, con non-OOP essere un po veloce, ma la differenza sarebbe praticamente trascurabile.

Penso che i modelli di progettazione OO sarebbero utili per l'organizzazione del codice, ma i problemi di progettazione sono lasciati a voi. Penso che ne trarrai beneficio più che dall'utente. L'utente può vedere lo stesso risultato se si utilizza OOP o non-OOP.

+0

Grande intuizione! Ho notato da tutto il codice che ho recensito durante la mia vita che gli altri si sentono uguali. Un po 'di codice richiederebbe più tempo per accedervi che scrivere gli aggiornamenti per una volta capito cosa stava succedendo. –

+2

Personalmente, mi piace l'approccio OOP. Mi fa risparmiare un sacco di tempo cercando di cambiare tutto il codice quando posso apportare le modifiche in pochi punti. –

3

Quanto sono rilevanti i modelli di progettazione OO nello sviluppo di applicazioni PHP per il Web?

IMO sono molto rilevanti per qualsiasi applicazione PHP non banale, purché il modello che si sta utilizzando sia applicabile al problema in questione.

Fa qualcosa per le prestazioni?

Non necessariamente, e si può prendere sia in termini positivi che negativi. I modelli di progettazione più popolari non aggiungeranno direttamente alcun beneficio di prestazioni positivo e alcuni che impongono più ereditarietà o struttura di classe potrebbero aggiungere un trascurabile costo di prestazione (sottolineo trascurabile).I vantaggi dell'utilizzo di modelli ben noti, quando applicabile, superano questi costi trascurabili.

Un esempio a cui posso pensare dove un modello potrebbe migliorare direttamente la "prestazione" (per quanto riguarda l'utilizzo della memoria) sarebbe l'uso appropriato del modello singleton. Se in un dato momento hai solo bisogno di un'istanza di un oggetto, allora riduci l'utilizzo della memoria utilizzando quell'istanza.

Oppure è solo per mantenere il codice snello per pratiche di sviluppo agili?

Direi che l'uso corretto dei modelli mantiene il codice più gestibile, piuttosto che "snello". Ciò faciliterebbe qualsiasi ciclo di sviluppo, incluso quello agile, dal momento che il codice che utilizza modelli ben noti è più facile da leggere.

Chi è il principale benefattore per l'implementazione di questi modelli di progettazione? È il cliente o lo sviluppatore?

Principalmente lo sviluppatore (soprattutto se si tratta di uno sviluppatore plurale (s) in cui una squadra ha che fare per guardare lo stesso codice.) C'è un impatto indiretto sul cliente in quel codice ben scritto avrà ovviamente meno bug, e il software che usa i pattern avrà probabilmente meno tempo di inversione dal re-inventare la ruota.

+0

Sono d'accordo con tutti i tuoi commenti. Allora perché tanti "clienti" piccoli e medi preferiscono usare codificatori meno esperti/poco costosi?Forse a loro non importa come sembra il coraggio finché ha un grosso motore e la vernice è lucida, eh? –

+1

Penso che i clienti medio-piccoli preferiscano i programmatori meno costosi semplicemente perché sono più economici. Se viene data la possibilità di scegliere tra uno sviluppatore economico che scriverà codice spaghetti e uno sviluppatore più costoso che scriverà un codice ottimo, molti clienti, in particolare i clienti che sono nuovi allo sviluppo di software contrattuale, sceglieranno lo sviluppatore economico. Il buon codice è difficile da quantificare. Le PMI più esperte conosceranno un po 'cosa cercare, o almeno guarderanno pesantemente al tuo portafoglio. – schematic

0

Nei algoritmi (come quicksort) devono programmazione procedurale, design pattern sono ad oggetto design orientato. Sono un modo provato per risolvere alcuni problemi comuni.

Il principale beneficiario è un devolper, ma come effetto collaterale un cliente otterrà probabilmente un prodotto finale migliore.

Ogni volta che sono rilevanti o meno, dipende dai determinati requisiti dell'applicazione e dall'approccio scelto. Può sembrare laconico, ma quando inizi ad analizzare la tua applicazione e confronta i suoi requisiti di progettazione con i modelli esistenti, saprai come e quando usarli.

+0

Meglio in che modo? Conosco molti clienti che preferirebbero pagare uno studente di liceo di $ 500 per incollare insieme il loro sito web piuttosto che pagare un ingegnere di $ 1500 per costruirli qualcosa di spettacolare. Quindi, come facciamo a convincere i clienti a capire che ottengono qualcosa di "migliore" assumendo esperienza? –

+0

Di solito il codice orientato agli oggetti è più flessibile di quello procedurale e può essere "toccato" dall'utente. Ovviamente, un buon codice procedurale può comportarsi meglio di quello non-così-buono orientato agli oggetti. Una volta acquisita familiarità con questi modelli, diventerai più produttivo -> più tempo per codificare -> codice migliore -> miglior prodotto finale. Ma come hai detto tutto dipende dalle esigenze del cliente. – doc

Problemi correlati