Sto lavorando a un progetto che richiede da parte mia di creare una struttura di codice modulare ed estensibile. Questo codice dovrebbe essere in grado di supportare più client. La buona notizia è che il codice non dovrebbe fare nulla di spettacolare. Spiegherò questo più in dettaglio più avanti nella domanda.
Quindi ora ho circa 30 filiali per circa 60 clienti. Alcuni clienti avevano bisogno di un proprio ramo perché al momento era più semplice separare il proprio codice da tutti gli altri in modo che nel tempo diventassero 30 codici separati, che sono molto simili.
Quindi ora l'architettura non potrebbe essere più semplice. La richiesta proviene dal client in formato XML e quindi procedo a restituire XML. La parte del processo è principalmente CRUD. Nulla di bello. Ho due front controller uno per le azioni (INSERT, UPDATE, DELETE) e uno per le richieste (SELECT). Quindi quel controller anteriore include solo lo script richiesto dal cliente. Ogni richiesta e ogni azione ha il proprio script dedicato. Non ci sono una singola classe nel progetto. Tutto è scritto in modo procedurale.
Quindi nella nuova struttura dell'app l'obiettivo è avere un ramo principale che tutti i client utilizzeranno e sarà gestito da un file conf.
Ti sto dicendo tutto questo perché non sono sicuro di come strutturare tutto. Non ho molta esperienza con OOP. Conosco i concetti e la teoria ma è più difficile quando si tratta di codifica effettiva in quello stile.
La mia idea ora è. Sto lasciando due front controller per azione e richiesta perché non richiede alcun cambiamento dal lato client dell'applicazione e per ora è importante. Ora serviranno solo come ottenere la richiesta e ricambiarlo. Chiameranno anche ActionController e RequestController. Saranno un po 'più intelligenti. Sapranno riconoscere quali richieste / azioni client inviate e quindi faranno di nuovo oggetto di quella classe.
Ogni azione / richiesta ha alcuni passi che deve fare. Quindi penso che ogni classe abbia bisogno di un metodo pubblico "esegui" che chiamerà semplicemente il metodo di quella classe secondo l'ordine di cui ha bisogno, ma temo che, anche questo sia un modo di pensare procedurale, semplicemente non lo sarà punteggio globale ma in Classe.
$client_request = new $fullClassPath(new $mapperClassPath);
$response = $client_request->execute($request);
Inoltre Come gestire il Database, probabilmente dovrei fare azioni sul database il più astratto possibile.
Il file di configurazione sarà molto importante, quindi non so se è la soluzione per creare classi per ogni funzione e includere le classi se quel campo funzione è impostato su true nel file di configurazione?
Ogni azione ha una propria risposta al client e può essere un xml piuttosto pesante. Qual è la soluzione lì. Dovrei avere una classe di risposta che gestirà questo. Ho paura che la lezione sia abbastanza pesante perché ci sono circa 20 azioni e 5 richieste e ognuno ha una risposta xml diversa.
Quindi ogni aiuto è apprezzato con qualcuno che ha esperienza con progetti simili, anche alcuni link a buoni articoli non farebbero male.
Dovrei menzionare che il linguaggio con cui sto lavorando è vanilla (semplice) PHP.