PHP Application - struttura del codice in pratica (3-Tier)?

1

Dovrei dare una premessa dicendo che sebbene io stia programmando da un po 'di tempo, questa è la prima volta che lo faccio per lavoro e sono relativamente nuovo a PHP.

Mi è stato chiesto di creare un'applicazione PHP che, a prima vista, è piuttosto semplice, sebbene abbia una logica aziendale complicata. Fondamentalmente, mostra all'utente un certo numero di opzioni a cascata e, una volta inviato il modulo, restituisce un set di dati da un db disposto secondo la logica aziendale.

Quello che ho finora è un numero di file php contenenti chiamate al database e snippet html che sono chiamati ajax da JS per visualizzare ogni dropdown seguito da un file aggiuntivo per creare la tabella di informazioni risultante, con tutta la logica di business in esso contenuta e più chiamate al database.

Come sono sicuro che tu possa dire, al momento il codice è per lo più procedurale, tuttavia dato che deve essere implementato su un gran numero di pagine web, ho esaminato diverse architetture per definire il codice in un modo più manutenibile e scalabile - qualcosa che ho cercato di fare ricerche per l'ultima settimana e non sono più avanti.

Ho fatto ricerche su cose come MVC / MVP, ma non riesco a capirlo, dato che molte informazioni sono contrastanti e, a quanto ho capito, non sono strettamente applicabili alle applicazioni web in quanto sono state progettate originariamente per app desktop. Tuttavia, mi sono imbattuto in una buona descrizione della struttura a 3 livelli che per me ha senso, ovvero:

  • Presentation Layer
  • Livello di logica aziendale
  • Livello dati

Tuttavia, non sono sicuro di come ottenerlo in termini pratici. Questo è il mio pensiero finora:

  • Sposta tutte le funzioni e proprietà logiche in una classe 'business_logic'
  • Sposta tutte le chiamate al database in una classe 'data_layer' per creare un'istanza nella classe 'business_logic'
  • Sposta i frammenti di codice in una classe 'view' - eventualmente istanziata nella classe 'business_logic'

La mia domanda principale (a parte questo è un buon modo per farlo?) dovrebbe essere istanziata la classe 'business_logic' in un file PHP chiamato dal browser (ajax) per gestire tutti i dropdown a cascata e il risultato o dovrei mantenere un file separato per ognuno di questi?

NB. Allo scopo di abbreviare questa domanda, ho omesso informazioni sulle classi che ho per la convalida dell'input dell'utente e le connessioni al database, ecc. Evito anche deliberatamente di usare un framework come Symfony, CodeIgniter o CakePHP poiché viene già inserito in un sito web esistente ed è come una piccola app.

Qualunque consiglio o aiuto che potresti offrire sarà apprezzato con gratitudine !!

    
posta Gothic_Anatomist 15.09.2017 - 15:46
fonte

1 risposta

1

La struttura a tre livelli sembra soddisfacente. Tuttavia, proverei ad evitare di creare classi che contengono un intero livello di applicazione.

Invece, suddividi i livelli in namespace.

Nel spazio dei nomi della presentazione , puoi creare classi che estraggono i dati dalle richieste http, chiamare la logica dell'applicazione e quindi racchiudere i risultati in una risposta http (includendo il rendering html / JSON / ... ). Una classe per ogni struttura dati o parte della logica aziendale dovrebbe fare il trucco.

Lo spazio dei nomi business logic potrebbe contenere classi che eseguono ciascuna un'attività specifica nel contesto della tua domanda. Nella mia esperienza, questo è il più importante nel livello della logica di business.

Infine, lo spazio dei nomi accesso ai dati conterrà classi che facilitano l'accesso alle strutture di dati. Ogni classe in questo spazio dei nomi può essere associata a una struttura di dati che l'applicazione utilizza e non fa altro che ottenere i dati dal DB (o altre API) e restituire oggetti o matrici di oggetti contenenti tali dati.

Infine, capisco perché non vorresti usare un framework gonfio. Dai un'occhiata a Silex però - non prescrive alcun modo particolare di organizzare il tuo codice e non ha quasi nulla tranne che per l'iniezione di dipendenza , routing e le classi di symfony Request / Response , tutte estremamente utili (in particolare per la scalabilità) e un grosso problema per implementare te stesso.

    
risposta data 15.09.2017 - 19:56
fonte

Leggi altre domande sui tag