Mi chiedo se esiste un modello di progettazione per tale problema:
Diciamo che stiamo costruendo un negozio web per un produttore di porte e finestre, dove il cliente ha un catalogo (elenco) di prodotti, dal quale può sceglierne alcuni e personalizzarli, prima di effettuare un ordine.
Ogni prodotto ha le sue proprietà definite, come nome, prezzo, descrizione. Ovviamente, il cliente non è autorizzato a modificare nessuna di queste proprietà. Ma c'è uno spazio per personalizzare il prodotto. Quando sceglie una finestra, può scegliere il colore, le dimensioni, forse un colore del vetro e scegliere alcune caratteristiche aggiuntive. Quando sceglie le porte, allora può scegliere un colore, una dimensione, ma anche un tipo di serratura.
La prima idea che mi è venuta in mente è:
- Creare classi di definizioni dei prodotti (WindowDefintion, DoorsDefinition), che contengono informazioni sul nome, il prezzo, la descrizione. Questi sono elencati in un catalogo
- Crea classi di istanze di prodotto (Finestra, Porte), che contengono riferimenti al prodotto, ma aggiungono anche campi personalizzabili, specifici per determinate istanze.
Gli svantaggi sono forse sciocchi, perché si tratta principalmente di creare una classe di definizione per ogni classe di istanza, ma ciò comporta anche una quantità più raddoppiata di tabelle di database e repositiories. Mi stavo chiedendo se c'è qualche altra soluzione?
Questo esempio non è il caso. Lo sto usando per facilitare la comprensione del problema. Nel caso, i prodotti non hanno una buona generalizzazione comune, che un prodotto darebbe in questo caso (utile per avere nome, descrizione e proprietà del prezzo).