Sto lavorando a due progetti separati ora che sono essenzialmente solo CMS: un mucchio di moduli per la registrazione di vari bit di informazioni. Ogni progetto è costruito per servire molti clienti e ogni cliente sembra voler registrare informazioni leggermente diverse.
In un progetto abbiamo gestito questo copiando e incollando tutta la logica che circonda quel modulo per ogni cliente in modo che potessimo apportare le modifiche senza influenzare gli altri client, o costruiamo un modulo principale contenente tutti i possibili input e quindi rimuovere a livello di codice gli input che il client non desidera (il nostro framework ci consente di rimuovere gli input (essenzialmente dal 'controller') prima del rendering finale del template). Nessuna delle due soluzioni è veramente pulita e fa in modo che i moduli siano "crollati" con le condizioni "se" in base al client che stiamo servendo.
L'altro progetto che sto appena iniziando e non voglio più incappare nelle stesse insidie, ma ho problemi a trovare un buon modo per risolvere questo problema.
Potrei elencare tutti gli ID di input per ogni elemento del modulo nel database e quindi creare una mappatura tra loro e i client, quindi nel modello di modulo avvolgere ogni rendering di widget con un segno di spunta per vedere se l'input è abilitato per il cliente attuale. Sul back-end - quando il modulo viene inviato - potrei salvare solo i dati inviati e rinunciare ai condizionali per la maggior parte. Ciò crea una dipendenza dagli ID utilizzati nel modello che deve corrispondere a quelli registrati nel DB - Non voglio creare l'intero modulo in modo programmatico poiché non mi darebbe abbastanza personalizzazione. È il massimo che riesco a trovare.
Qualcuno ha già avuto a che fare con questo tipo di problema? Come ti sei avvicinato? Che cosa ha funzionato, cosa no?
Per fare un confronto, potresti prendere in considerazione siti come Freshbooks, Trello o un bug tracker o Facebook - se una qualsiasi di queste app consente a ciascun utente di personalizzare la propria pagina per aggiungere o rimuovere input in modo che possano registrare solo i cose di cui si preoccupano - come gestiscono questa complessità da un punto di vista architettonico?