Sono confuso nella soluzione di architettura per l'albero di espressioni booleane. La logica aziendale ha il compito di analizzare la configurazione e creare un albero da tali espressioni.
(a && b || c) && d || (e && f)
Quindi nell'interfaccia utente a, b, c, d, e sono celle, possono essere scambiate (via dnd). () - è layer (s), che può essere o non essere in espressione. a & & b & & c - non ha strati di BG. a & & (b & & c) - ha uno strato per le celle be c. I livelli possono essere ridimensionati / rimossi / aggiunti, ecc. Ma so come e cosa fare per la convalida. & & e || sono operatori. L'operatore può essere modificato, quindi l'operatore dell'interfaccia utente ha un tipo (AND || OR).
Se usi MVP e html per l'interfaccia utente. Può essere qualcosa di simile.
class QueryView {
public el = document.createElementNS(XMLNS, "g");
constructor(private _presenter: Container) {
this._presenter.setView(this);
}
public init(cells: Cell[], operators: Operator[], layers: Layer[]) {
}
private initCells() {
// initial rendering of cells ?
}
private initOperators() {
// initial rendering of operators ?
}
private initLayers() {
// initial rendering of layers ?
}
private listen() {
// listen for clicks drops resizes etc. and call presenter methods
}
}
Ma in tal caso, Operator View può cambiare direttamente il tipo di operatore nel modello Operator. OperatorView.click = OperatorPresenter.toogleType ().
Sono anche confuso perché QueryView ha raccolte di dati e gli oggetti di questa collezione possono avere le proprie viste che sono visualizzazioni secondarie di QueryView.
Il risultato (stato corrente) di questo QueryView verrà passato alla logica di business principale, dove QueryTree verrà creato / aggiornato. Quindi per favore pensa a questo costruttore di espressioni booleane come a parti separate. La logica principale di Cuz inizia dall'analisi delle espressioni e l'espressione può essere solo una stringa come negli esempi.
EDIT: Come ho capito tutto deve (può) essere annidato. Se il modello di query ha una struttura, avrà anche modelli per operatori, condizioni, filtri. Quindi queryPresenter otterrà i dati dal modello, quindi creerà i presentatori necessari per gli operatori (forse per i livelli) e le celle (filtri). E ogni presentatore avrà la sua vista. Per me la logica di queste triadi è nuova, quindi ogni risposta sarà utile.