decoratori costi
-
06-09-2019 - |
Domanda
Per ogni prodotto sono associati i calcolatori di costo come:. Sconto, sconto dal commerciante, bonus da commerciante, ecc sconto mensile in futuro, sarebbero stati aggiunti altri calcolatori di costo
Abbiamo una classe di prodotto concreto e molti decoratori per ogni calcolo dei costi. Tutti i prodotti devono utilizzare tutti i calcolatori, perché i calcolatori decidono di applicare i loro calcoli per le proprietà del prodotto, come prodotto ID del commerciante, categoria id, colore, ecc.
E, ci sono milioni di prodotti nel nostro sistema, che deve essere calcolato. Quindi, è meglio memorizzare nella cache il calcolatrici decorati. Perché, decorando ogni entità prodotto in fase di esecuzione sarebbe costoso. Ma questo è difficile con motivo decoratore. Sembra un odore di utilizzare questo modello nella nostra situazione.
Cosa suggerisci? Dovremmo usare decoratori, strategia o modello di catena di responsabilità? O no-pattern.
Soluzione
Tutti i prodotti devono utilizzare tutta la calcolatrici, perché i calcolatori decidere di applicare i loro calcoli le proprietà del prodotto, come prodotto ID del commerciante, categoria id, colore, ecc.
Se avete bisogno di avere tutti i prodotti utilizzano tutti i decoratori, allora non stai guadagnando davvero alcun beneficio dal modello. Questo significa che se si implementa un nuovo decoratore, tutte le entità esistenti devono essere aggiornati per utilizzare tale nuova decoratore?
pittura dovrebbero essere applicati ai prodotti solo quando necessario, e solo i decoratori che sono necessari devono essere applicate.
Credo che si dovrebbe rimuovere la decisione dal di dentro i decoratori; un'altra cosa dovrebbe decidere se applicare un decoratore, nel qual caso avvolge il prodotto nei decoratori appropriate. In questo modo si sa che se un prodotto è avvolto in un decoratore, che sta interessando decoratore (effettuando?) Del prodotto.
Altri suggerimenti
In un modello di strategia, l'intento delle modifiche degli oggetti.
Quindi, penso che la strategia sarebbe una buona scelta.