Ho lavorato a un brainstorming su un problema specifico per un po 'e oggi ho pensato a una soluzione. Ma non ne sono troppo sicuro. Quindi questa domanda per feedback e suggerimenti.
Userò il semplice esempio di un prodotto T-Shirt
.
La T-Shirt ha più opzioni:
Color
: White
, Black
Size
: Small
, Medium
, Large
Ora, nel caso di una T-shirt White
, non c'è Large
e Medium
. Pertanto, l'opzione Large
e Medium
non dovrebbe essere disponibile quando si seleziona White
.
Questo significa che se selezioni per la prima volta Large
o Medium
. Quindi White
non dovrebbe essere disponibile.
L'implementazione precedente è stata eseguita come struttura ad albero. Quindi devi sempre selezionare Color
poi Size
. Ma non è davvero un albero come lo vedo io.
La mia idea era di creare un elenco di regole.
codice pseudo:
rule1: if color is white, sizes not allowed are [large, medium]
//then generate the opposite rules based on rule1.
rule2: if size is medium, color not allowed are [white]
rule3: if size is large, color not allowed are [white]
store rules in database
Quando hai a che fare con prodotti che hanno molte opzioni questo potrebbe complicarsi, ecco perché pensavo che la generazione delle altre regole basate sulla prima regola potesse ridurre la complessità.
Pensieri a qualcuno?
Aggiornamento:
Qualcuno ha notato di seguito e ho capito che ho usato l'esempio sbagliato. Non è un prodotto con SKU e livello di stock. È un servizio. Un esempio migliore sarebbe un computer configurabile. Molte combinazioni di CPU, RAM, GPU, ecc. Che tutti producono un prezzo diverso e dipendono da specifiche schede madri o da una selezione specifica, non tutte le CPU e / o RAM ecc. Sono selezionabili.
Update2:
I prodotti / servizi hanno ciascuno circa 7 opzioni. Ogni opzione può avere tra 2 e 7 valori. Una struttura a matrice come suggerito, diventerebbe complessa IMO.
Inoltre, ci siamo allontanati dall'avere un prezzo per ogni singola variazione (cosa che è stata ridicola da gestire) con la formula per generare prezzi in modo dinamico.
C'è sempre stato un problema con il carico del DB a causa della struttura ad albero. Ogni volta che viene selezionata un'opzione, deve recuperare i valori delle opzioni successive. Ogni volta che aggiungi un nuovo valore a un'opzione, puoi anche duplicare molte delle opzioni successive. Quindi ti sfugge molto velocemente.
Per entrare in maggiori dettagli la mia soluzione era usare un database basato su documenti (NoSQL) Avresti una raccolta "Prodotti" o "Servizi".
Ogni prodotto / servizio sarà simile a questo:
{
"product": "T-Shirt",
"options": {
"size": [],
"color": [],
"pattern": [],
... about 4 more
},
"rules": [....],
}
Inizialmente si caricano tutte le opzioni nell'interfaccia. Quindi, mentre esegui le selezioni, esegui le regole per disabilitare i valori delle opzioni specificate.
L'uso di una struttura del genere mi sembra che avrebbe un sovraccarico minore avendo le regole incorporate in ogni prodotto / servizio invece di avere una grande tabella relazionale con tutte le opzioni (che è già enorme).
Il lato client è vantaggioso perché non deve interrogare il DB ogni volta che viene modificata un'opzione.