Mi rendo conto che funzioni come Decoratori dal motivo Decoratori. Cioè, ognuno potrebbe avvolgere un altro decoratore. Quindi, ogni oggetto reale avrà caratteristiche: FirstObject, FirstObject.envelopes, FirstObject.envelopes.envelopes, ... fino all'ultimo. Dovrai fare una funzione, che mostra per tutti i decoratori tutti gli interni. E la funzione che renderà dal tuo DB tale "MATRYOSHKA".
Ogni decoratore avrà i suoi campi specifici:
- nome della funzione
- Valore della funzione. Un elenco di possibili valori di funzionalità dovrebbe essere impostato come elenco statico in ogni classe Decorator.
- Dove verrebbe mostrato in quale pagina in quale formato. Questo mi renderebbe conto come una mappa di tipi di pagina come chiavi e valori = oggetti di un posizionamento di classe, includerà luogo e formato. Questi posizionamenti eseguiranno la visualizzazione reale della funzione nella pagina.
- Analizzerai anche altre pagine? Per qui è possibile impostare anche i luoghi in cui nelle pagine potrebbero essere trovate queste funzionalità. Ma questo è un punto molto difficile.
- Qui puoi mettere le dipendenze - ciò che i decoratori potrebbero racchiudere.
- Anche qui dovrebbe esserci un meccanismo per trasmettere informazioni importanti dai decoratori interni a quelli esterni. Ma questa è la parte dello standard del modello di progettazione.
L'altra variante - ogni oggetto è una lista di tali caratteristiche, solo quelle indipendenti. Ma questo è, IMHO, costruzione troppo dinamica per il tuo compito, ed è più difficile da controllare.
Questo è il modello più primitivo.
Per quanto riguarda quelli più elaborati, dovresti tenere conto dei sinonimi dei nomi delle funzionalità. Ciò significa che l'elenco di possibili valori di funzionalità cambierà in elenco di elenchi.
Il prossimo passo: alcune funzionalità potrebbero esistere separatamente o insieme come un'unica stringa. Ad esempio, GeForce o 590 o GeForce 590. Per la realizzazione di questo devi usare Congregator invece di Decorator.
Un altro passaggio: dovresti considerare le funzionalità rappresentate dai numeri (prezzo, data). È indipendente sui due passaggi precedenti. Invece di elenchi di valori possibili, il decoratore avrà una gamma di valori possibili. Il modello di ricerca verrà modificato in modo che l'impostazione dell'intervallo sia possibile.
Il prossimo passo indipendente - ordinare per caratteristiche. Avete tutte le caratteristiche ordinate includendo e tutti i valori sono ordinati per ordine negli elenchi di possibili valori. Questo è l'ordine naturale. Ma potresti cambiare l'ordine.
Quindi, due strumenti di potenza che dovresti fare: l'interfaccia utente del ricercatore e l'interfaccia utente del committente. IMHO, cerca di non eseguire la ricerca o ordinare per questi oggetti dal tuo codice, usa invece SQL. Gli oggetti dovrebbero solo rappresentarli, utilizzati per l'input e l'output e l'impostazione della definizione dell'interfaccia utente di ricerca / ordinamento.
Naturalmente, potrebbe essere ulteriormente elaborato, ma sarebbe meglio realizzare il compito passo dopo passo.