Ho iniziato la programmazione PHP intorno al 2002, quando non c'erano molti framework in giro. Nel corso degli anni, ho sviluppato il mio framework PHP, che sembra essere completamente diverso da qualsiasi standard che ho incontrato.
Proverò a descrivere il framework che ho creato:
Fondamentalmente è un motore che costruisce un'intera web-application, convertendo i file template in file HTML. In genere un'applicazione consiste di file modello per ogni pagina diversa nell'applicazione e alcuni file CSS / JS personalizzati per elementi che non sono (ancora) nel motore. L'interazione dell'utente viene eseguita con script di standard nel framework in grado di gestire tutti i tipi di operazioni (selezionare, creare, aggiornare, visualizzare, eliminare, inviare e-mail, esportare come PDF o Excel, ecc. .). Il motore riconosce automaticamente quali script devono essere utilizzati e tutte le variabili necessarie per il funzionamento di questi script sono inviate da Javascript utilizzando Ajax, inclusi il tipo di operazione e tutti i valori dei moduli necessari. JSON o un URL per il PDF o il file Excel creato viene quindi inviato al client.
I modelli possono contenere client HTML, CSS e Javascript e SQL serveride, ma i più importanti sono tag xml personalizzati che sono interpretati da PHP e, a seconda degli attributi, convertiti in tag HTML (multipli), CSS e Javascript- codice. Esistono molte classi PHP standard differenti per tag personalizzati che possono generare elementi visivi, come pulsanti, datagrids, form, ecc. Ma i tag e gli attributi sono anche usati per database, sessioni, aggiornamenti clientide usando Ajax / jQuery, produzione di PDF, invio di e-mail, ecc. Il motore può utilizzare tutti i tipi di librerie, come l'interfaccia utente jQuery, Cordova, Bootstrap, PHPExcel, mPDF, ecc. e sa automaticamente quali file JS e CSS includere nel file emesso. Può anche memorizzare in cache l'HTML, creare l'applicazione e minimizzare JS e CSS.
In questo modo ho no classi specifiche per tutto ciò che è nell'applicazione o nel database (ad esempio Conti o Fatture). Quando il mio modello di dati cambia, devo solo aggiornare i template e no codice PHP.
Ogni framework che sto provando (es. Phalcon, CakePHP e Laravel) sembra richiedere la definizione della logica aziendale, del modello di dati e di tutte le interazioni nelle classi PHP specifiche (ad es. Fattura). Pertanto, quando un campo viene aggiunto a una tabella di database, è necessario aggiungere una proprietà alla classe corrispondente. Ovviamente, cambiano anche i modelli di visualizzazione e i controller di interazione. E per ogni tabella nel database sono necessari diversi modelli e file di controller. Penso che sia abbastanza complesso e dispendioso in termini di tempo, rispetto alla mia soluzione (alcune delle mie applicazioni utilizzano più di 100 tabelle di database diverse).
Il lato negativo del mio approccio è che il mantenimento delle classi standard nel framework richiede molto lavoro. Soprattutto perché in diverse applicazioni le stesse classi devono essere in grado di comportarsi in modo un po 'diverso, quindi ogni classe ha molte proprietà per controllare tutto questo. In questo modo il motore è diventato molto potente, ma anche abbastanza lento, complesso e difficile da mantenere. Mi rendo conto che la mia soluzione in realtà non separa il codice e il design, ma dal momento che costruisco per lo più applicazioni web di database, questo non è davvero necessario per me. Il modo in cui le cose sembrano possono essere manipolate abbastanza usando alcuni CSS personalizzati.
Quindi, dove andare da qui ora? Mi piace molto il mio framework, ma mi piacerebbe rispettare di più gli standard web per essere in grado di assumere gli sviluppatori esterni un po 'più facilmente. Ma dal momento che il mio framework è molto diverso da qualsiasi altra cosa, non ho idea di quale framework scegliere.
Le mie domande sono:
- Cosa ne pensi del mio "motore di applicazione web" che utilizza principalmente solo i modelli? Qualcun altro lo fa?
- Quale framework esistente potrebbe essere usato per completare la mia stessa struttura, piuttosto che interamente cambia il modo in cui lavoro ora?