Domanda

Ho una domanda specifica, che potrebbe utilizzare una risposta generale ... Quando la creazione di applicazioni multi-tier in PHP, tutto deve essere fatto nel livello Business Logic, oppure può fare qualsiasi livello di lavoro ... Esempio, consente di dire che sto costruendo un'applicazione che mostra le informazioni utente (dal database) sul livello di presentazione. Devo usare lo strato di business per passare semplicemente i dati al livello di presentazione, o semplicemente ottenere le informazioni dal database direttamente all'interno dello strato di presentazione. Se il livello di presentazione essere utilizzato SOLO per la presentazione dei dati, lo strato di accesso utilizzato solo per ottenere i dati, e tutto il lavoro essere fatto nel livello di business?

Inoltre, parlando dei diversi strati, è meglio fare le cose procedurale, o utilizzando OOP (come l'utilizzo di include per mostrare i modelli VS utilizzando una classe per includere i modelli, la convalida dei dati procedurale vs utilizzando una classe, o di funzioni vs classi per ottenere i dati dal database, ecc)

Come si può vedere, sto cercando di capire come funzionano le cose, e il modo migliore di fare le cose. Detto questo, se avete qualche consiglio o qualche consiglio generale sul tema ... Per favore lasciarli ..

Grazie

È stato utile?

Soluzione

applicazioni Web e N-tier è interessante, soprattutto perché il concetto di N-tier è ampliata con l'adozione diffusa di JSON e AJAX o Flash e XMLRPC. Questo grafico Webopedia visualizza una linea blu sfalsata che esprime questo bene. Per riassumere: il vostro business, di accesso, e la logica di presentazione non solo potrebbero esistere sul server - ma in alcuni casi, a destra nel browser. L'intenzione di N-tier, tuttavia, è separabilità . Se avete bisogno di cambiare la vostra interfaccia utente o il database, o aggiungere altre interfacce utente, non si dovrebbe essere interessando la logica di business. E questo è ciò che avrebbe determinato la vostra API -. Anticipando la giornata come HTML e CSS vengono scartati per Flex, e MySQL è cambiato per Oracle

Questo è requisiti stabiliti, e in alcune applicazioni web ho usato, variazioni di N-livelli vengono utilizzati simultaneamente. Prendiamo ad esempio LyrisHQ (una e-mail ASP). Hanno un'applicazione web del cliente. Di recente, hanno fissato spingendo la loro applicazione basata su Flash. Questa è chiaramente la spedizione di un sacco di dati a destra al browser, e non v'è probabilmente un po 'di logica di business duplicato in Flash UI. Essi devono mantenere entrambe le applicazioni, tuttavia, dal momento che uno dei due è necessario per esigenze diverse (e sovrapposti).

applicazioni PHP più comuni non stanno prendendo in considerazione il trasporto molti dati non formattati al browser. Ma se tu fossi, questo sarebbe informerà molto rapidamente come si vorrebbe progettare le API. Molto probabilmente, si vorrebbe controller che potrebbero parlare XMLRPC, REST, SOAP o ... oltre ad una simile classe di controllore interno che i vostri PHP modelli di presentazione utilizzati. Ciò strettamente significare per una semplice pagina Web di accesso, si avrebbe un modello di PHP per il modulo di accesso che ha parlato a una classe LoginController. Un'interfaccia XML sarebbe ugualmente utilizzare la stessa classe LoginController. Proprio come si farebbe supporre che si sarebbe bonkers di scrivere SQL in una richiesta Ajax ... si sarebbe strettamente evitando le query di scrittura nei vostri modelli di presentazione.

strati business può essere più o meno severe, perché spesso non c'è mai l'obbligo di cambiare marca di database back-end. In un rigoroso disegno N-tier, come gli oggetti di business avrebbe parlato al database sarebbe come se si potesse passare da MySQL a MS SQL senza dover riscrivere il livello business. A volte questo è fatto da modellazione di oggetti per ogni tabella (Tabella Gateway), ogni riga (record attivo), ogni join, o di ogni transazione. Questo è dove qualcosa come DOP o PHP-ADO sono utili, ma insufficienti per l'isolamento completo. strati ORM / Persistenza in Java come Hibernate dimostrano meglio questo tipo di isolamento, spesso fornendo un oggetto Query Language (OQL).

Io, Attualmente sto intraprendendo una transizione back-end da un'applicazione PHP basato MySQL verso un MS-SQL uno. L'applicazione ha sempre e solo utilizzato query SQL dirette. Immaginate la scelta di come prendere una serie di query in una classe e uno di loro astrazione, o sottoclassi, e si spera non alterare la logica di business. Al minimo, si vuole fare tutto il vostro SQL chiamate indirette. ( S.O. post su PHP ORM .)

E, infine, per le tue domande su OOP: usarlo come è necessario per soddisfare le vostre esigenze. La mia tecnica personale è quello di iniziare con la logica proprio di un modello di presentazione di PHP per un paio di minuti per ottenere il rotolamento della sfera, ben presto sarò refactoring che in una classe e un modello. Se ho idee comuni, mi rompere le routine in classi comuni, cercando di preservare il principio di DNRY. (A SO postare su questo qui. OOP non è un requisito fondamentale per la progettazione N-tier. DNRY è molto importante per mantenere il vostro codice mantenibile, tho. didieci scadenze e la portata-shift distruggere un'API. Refactoring fino ad ottenere quello che ti serve per andare avanti. Scommetto OOP vi aiuterà arrivare lì.

Altri suggerimenti

Una volta ho letto qualcosa di dire che i grandi modelli (strato di business) dovrebbe essere preferito su grandi controllori (strato di accesso).

Inoltre: Dipende molto sul progetto. Ai miei occhi non sempre ha senso utilizzare OOP per tutto (probabilmente non tutti saranno d'accordo qui), soprattutto in linguaggi di scripting come PHP che spesso è più facile fare semplicemente validatori come funzioni ...

Io sicuramente vi consiglio di non avere chiamate al database del livello di presentazione, che sconfiggere il suo scopo.

Ci sono diversi approcci per multi-tier architettura e hanno diverse raccomandazioni.

Zend Framework che ho lavorato con di solito è la forma del modello Fat / variante regolatore sottile.

Se trovare questo articolo Note sulla scelta di un quadro di PHP di essere abbastanza bravo a confrontando (in questo caso) CakePHP a Zend Framework.

La più grande differenza nel mio parere, era pulito è l'approccio convenzione-over-configurazione assunta dal CakePHP, che è molto diverso dal fuoco di configurazione in Zend Framework.

Utilizzando un quadro, che fa un sacco di senso se l'implementazione di un'architettura multi-tier, il vostro sono in un modo forzato o almeno spinto ad utilizzare OOP, che non è una brutta cosa.

Si potrebbe naturalmente implementare, dire un'architettura a 3 livelli con chiamate funzionali puri, ma non sarebbe scala che bene in base alla mia esperienza.

Per un sito web il pattern MVC, che in realtà è molto diversa a causa del modo in cui i livelli di comunicare, è una buona scelta.

La differenza tra un arco a 3 livelli "normale" e il pattern MVC è che la vista ha accesso sia il controllore e il livello di modello, dove il livello di presentazione ha accesso solo al livello logico del 3 livelli arch.

Sono d'accordo con quello che ha detto Franz, soprattutto di preferire modelli più grandi rispetto ai controller più grandi .. è anche possibile utilizzare una regola empirica per aiutare a distinguere dove il codice dovrebbe andare: se ha qualcosa a che fare con la struttura UI / flusso, mettere nel controllore; se si tratta di pura logica di business, si va nel modello ..

Vorrei aggiungere che, come uno sviluppatore Java che aveva un sacco di esperienza con Struts prima di testare le acque PHP, mi c'è voluto un po 'per capire come applicare le idee MVC ad un linguaggio di scripting .. Personalmente ho trovato che l'uso un sistema come CodeIgnitor ha aiutato molto .. si fornisce il quadro, proprio come Struts, e incoraggia i buoni modelli MVC ..

Il mio mondo è simile al seguente:

  

DB1 <- Model1 per fornire di accesso   funzioni, l'integrità dei dati, le imprese   regole per questo insieme di dati DB2 <- Model2   per fornire funzioni di accesso, i dati   integrità, regole di business per questo   set di dati

     

controllore: il flusso di controlli dati di   viste, filtri / organizza i dati di   visualizzazioni. Implementa le regole di business per   la data applicazione . conosce il   le regole di business tra Modelli.

     

Visualizzazioni: Niente di più che modelli   che i dati di visualizzazione forniti dal   Controller. Passare tutti i dati sul   controller. Non è a conoscenza di   Model1 o Model2 o il business   logica che li governa.

Mi raccomando facendo qualche ricerca su Design Patterns in quanto questo è il pezzo mancante del puzzle. Ci sono una serie di libri specifici per PHP che coprono questa discussione (quelli di APremere sono buone), così come la 'bibbia' di Design Patterns: "noreferrer design Patterns: Elements of Reusable Object-Oriented Software"

Aspettiamo per la versione più stabile di Doctrine2 .

E 'stato sviluppato con la filosofia dominio oggetto di persistenza-ignoranti. Sarà molto più facile da sviluppare applicazioni multi-tier con l'aiuto di questo quadro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top