Come creare moduli configurabili?

3

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?

    
posta mpen 12.03.2014 - 00:20
fonte

2 risposte

4

Esistono diversi approcci diversi per risolvere questo problema.

Dispone di pagine di moduli statici per ogni cliente

Questo è il più semplice da costruire. È possibile definire pagine e campi che sono univoci per il client. Ogni pagina può avere l'aspetto unico del cliente. Il codice comune sarà un po 'più difficile in quanto cose come i gestori di eventi per campi diversi dovranno essere replicate su tutte le pagine appropriate. Puoi minimizzare alcuni di questi utilizzando un framework client.

Avere una serie di campi su ogni pagina che determina quale campo viene mostrato in base al client

Questo suona come quello che hai ora. Una pagina per dominarli tutti. E un enorme casino se il flusso della logica o dell'applicazione cambia tra i client. Il codice comune non dovrà essere replicato poiché tutto il codice sarà comune alla pagina su cui si trova. È possibile utilizzare un framework client per aiutare con la produzione di pagine, ma poi si introducono le limitazioni dei framework sulla parte superiore della pagina monolitica.

Costruisci un sistema che ti permetta di rispondere a domande configurabili in base ai criteri che desideri

Questo sarebbe il più difficile da costruire. Hai ancora una pagina per domarli tutti, ma dal server puoi determinare quali campi devono essere posizionati sulla pagina. Un sacco di logica sulla pagina sarà semplificata, quasi allo stesso punto dell'opzione di forma statica sopra. Il codice comune sarebbe molto usato, ma più dalla costruzione della pagina piuttosto che da esso. Avresti la possibilità di costruire completamente la pagina sul server, essenzialmente servendo una singola pagina per utente in base alle opzioni del tuo cliente. È possibile utilizzare un framework client per mascherare il browser con una pagina dell'applicazione più reattiva. Questo sistema può anche richiedere l'uso del temuto stile di archiviazione dei dati EAV, non che ci sia qualcosa di sbagliato in questa tecnica. Ci sono alcune avvertenze associate al recupero dei dati da un archivio dati EAV.

    
risposta data 12.03.2014 - 00:45
fonte
1

Hai bisogno di una struttura per contenere quali input vogliono e come vanno sulla pagina. Nessun "se" blocco o condizionale - deve essere impostato in base, hai questo elenco di elementi, questo è dove vanno, questo è ciò che intendono, questa è la validazione per un particolare elemento ...

Questo non dovrebbe impedirti di personalizzare, dovrebbe in effetti renderlo molto flessibile, ma sarà un po 'complesso da risolvere.

    
risposta data 12.03.2014 - 00:41
fonte

Leggi altre domande sui tag