Domanda

Voglio costruire un negozio in cui i prodotti sono un po ' guidata attraverso il quale il prezzo è determinato.In questo caso sto parlando di prodotti di stampa.

Quindi, per la (un po') esempio quando si arriva al negozio e si desidera stampare un biglietto da visita, si arriva a decidere se si desidera stampare in bianco e nero o a colori, se si desidera scegliere di carta spessa o sottile, se si desidera stampare 100, 200, 500 o 1000 pezzi e così via.

Dopo tutto ci sarà un prezzo diciamo:in bianco e nero, carta spessa, 200 pezzi => 40,-$

In vero si hanno molte scelte da scegliere.Quindi, come potete pensare che ci sono molti, molti, molti prezzi, per il quale c'è nessuna formula.

Quindi la mia domanda è:Come posso gestire i prezzi?

La mia prima idea:Pattern Decorator.

Ma quando ho pensato, non è una buona idea.Come ho detto non c'è vera e propria formula, anche io sono per generare la procedura guidata (che può essere diverso se si desidera stampare biglietti di auguri).Anche io voglio essere in grado di modificare il prezzo attraverso un interfaccia di amministrazione o di aggiungere un prodotto o aggiungere un nuovo "decisione" come "vuoi la carta lucida?" di un prodotto o rimuovere uno (e ancora mantenere i prezzi intatto).

Così ora sto pensando di usare un albero per ogni prodotto, in cui posso aggiungere un livello (una nuova decisione), i livelli resort e così via.

Un'altra Idea è quella di Costruire una Sorta di Chiave di Oggetti attraverso decisioni e guarda il prezzo in una tabella di Prezzo.Un po ' come un Dizionario in cui è possibile aggiungere le decisioni e dopo tutto quello che ho generare una chiave per cercare il prezzo in tabella prezzi.

Quindi, prima di prototipazione mi chiedevo se io sono cieco e non vedo l'ovvia soluzione, o forse c'è un altro modo che è più elegante che io non so?

È stato utile?

Soluzione

Beh, l'idea che sto avendo è piuttosto complessa, ma il desiderio è complesso.

Il problema con la procedura guidata che si sta descrivendo è che dopo che hai fatto tutte le loro scelte, si può tornare al #2 e cambiare una cosa per vedere come cambia il prezzo ma il modo in cui si sta costruendo il vostro mago può influenzare il fatto che poi le scelte possono essere fatte a tutti, e come risultato piuttosto complesso insieme di codice da personalizzare per ogni prodotto, invece di memorizzare tutto bene in un database, in modo tale che il codice può fare tutto il necessario, e qualsiasi prodotto cambiamenti nel database, non modifiche al codice.

Innanzitutto, è necessario capire che avete logica dei prezzi, e, idealmente, questo sarà separata dalla presentazione.In altre parole, si dovrebbe essere in grado di presentare una procedura guidata passo per passo per un cliente, e una singola pagina con una casella di controllo opzioni e campi e chiedi loro di costruire la stessa cosa con le stesse limitazioni.

Cercate di evitare di progettazione di database in modo che non si può fare l'uno o l'altro.In altre parole, è limitare le opzioni per il futuro (e il cliente flessibilità) in caso di "scegli la tua avventura" stile procedura guidata.La ragione è che se io vado con 10 punti, quindi modificare il passaggio 2, devo andare a 8 passi in più - questo può andare bene se si garantisce che io non sono la duplicazione di scelte io le ho già fatte, ma se sto cambiando solo il colore della carta non voglio fare lo stesso 8 scelte di nuovo.Se si va questa strada, assicurarsi di mantenere un sacco di stato di tutto in modo che le scelte che hai fatto in precedenza mostrano come predefinita la prossima volta attraverso.

Vorrei prendere in considerazione l'aggiunta di un ulteriore livello di astrazione del database.Anziché specificare il percorso attraverso una struttura ad albero che l'utente può selezionare, mi piacerebbe vedere una matrice con ogni opzione di prodotto e di processo che mostra la compatibilità.

Per esempio, ho tre tipi di carta, 3 colori e 3 processi:

  • Carta

    • Luce
    • Regolare
    • Scheda
  • Colore

    • Rosso
    • Blu
    • Verde
  • Processo

    • Stampa
    • Piegare
    • Bind

Poi vorrei avere prezzi per ogni partita:

        Light   Regular Card    Red     Blue    Green   Print   Fold    Bind
Light                           0.05    0.05            0.001           0.50
Regular                         0.06    0.05    0.07    0.001   0.02    0.80
Card                                    0.06            0.002           0.90
Print                                                   0.002   
Fold                                                            
Bind                            

Gli spazi vuoti indicano elementi che non possono essere mescolati.
Voci da notare:

  • La stampa e il combinato - stampa fronte-retro indossa/inceppa la macchina più frequentemente.
  • Non si possono mettere gli elementi attraverso la piegatura della macchina più di una volta (una piega piega operazione è vuoto) - ma si potrebbe elencare i diversi tipi di pieghe e le carte si applicano a
  • Non è possibile associare piegato
  • Non ho elementi duplicati nella matrice (cioè la luce della carta di stampa è la stessa luce di stampa di carta - a seconda di come si curi il tuo query ti consigliamo di indicare questo o di modulo al tavolo in un modo che non importa)

Questo è solo un esempio di un semplice incarnazione - ogni prezzo sarebbe in realtà un link a un altro tavolo, che dà il prezzo per ognuno, se la quantità è all'interno di un certo range (ie, 100 potrebbe essere più conveniente rispetto a 10).Esso varrebbe anche se il costo è di per pezzo di carta, per ogni operazione, o per ordine - e questo potrebbe stack (così si potrebbe avere un associazione di carica di 0.001 per pezzo di carta per tenere conto dell'usura del taglierine e 0,50 al libro legato per il pezzo prezzo, quindi $5 installazione di costo per l'operazione di rilegatura di tutto)

Questo sarà presto diventare piuttosto complessa, dato il taglio numero di cose che si possono altre cose.

Ma una volta che i dati sono inseriti vi darà illimitato flessibilità nella definizione dei costi e la loro presentazione all'utente.Si possono trovare, per esempio, che vale la pena di mettere ogni diverso modello di macchina per la stampa in proprio di colonna (piuttosto che solo li chiama tutte le stampanti) e trovare il più basso di stampa prezzo per il cliente in base al tipo di carta, il colore, e le operazioni di stampa.

Si può anche riempire la matrice con il lavoro (tempo) in modo che si può dare stime di tempo nello stesso luogo, come le stime dei prezzi.

Se si esegue una procedura guidata, o mostrare tutto il contenuto della pagina in una volta, questo backend si impegna a sostenere.Guardare a ciò che Dell non per le configurazioni di computer portatile - non puoi fare certe cose con altre cose.Quindi, se si visualizza tutte le opzioni di una pagina, poi quando si passa dalla carta al cartoncino si può avvisare con "Hai scelto, inoltre, pieghevoli, che è incompatibile con il cartoncino.Sei sicuro di voler fare questo cambiamento?"

Ma in primo luogo - scrivono i casi d'uso e design di tutto il sistema prima.Se si salta in ora e iniziare a programmare qualcosa di questo complesso, si sta andando a prendere decisioni ora che sarà molto difficile da recuperare, ma poi è necessario fare grandi cambiamenti, o un compromesso su una funzione.

Naturalmente, scegli il tuo stile di avventura è molto più facile progettare e sviluppare, l'unico problema è che se si aggiunge un nuovo processo o di carta, è necessario aggiornare 200 alberi, e aggiungere 50 nuovi alberi.Ogni cambiamento nel negozio richiede un nuovo database (e, eventualmente, software) rollout, che i ritardi di recupero delle spese di capitale.Se si rendono molto flessibile anteriore, è più difficile ora e più facile/più velocemente in seguito.

Inoltre, è non limitare i tuoi clienti all'albero opzioni - se si desidera realmente stampa via 4 stampa a colori su un lato, e basso copiatrice, dall'altro si può esplorare l'opzione se i processi e i materiali sono compatibili.Ultimi 20 prodotti/processi, non si può davvero riempire completamente fuori l'albero.

Lasty, ti dà molto, molto raffinato controllo dei costi.Se il vostro processo di business tracce di utilizzo di macchina e i costi di manutenzione, ecc) ad una a grana fine livello, è possibile underbid il concorrente, perché sai che la tua macchina costi esattamente 0.00234 per pagina, mentre sono bloccato con il generico indovinare.Se voi iniziare a monitorare l'utilizzo di questo sistema e rendere i dipendenti di tenere traccia dei problemi, manutenzione, ecc, si può trovare molto strano correlazioni come cartoncino rosso costa più alla macchina piegatrice perché marmellate più frequentemente blu (per qualsiasi motivo).È possibile regolare il prezzo (all'ennesima potenza, in questo sistema), parlare con il produttore di carta, cessare l'offerta di opzione, o una serie di altre tattiche per spremere il sistema.Se alcune delle vostre macchine richiedono operatori esperti è possibile aggiungere ai dipendenti della matrice con il loro tasso di paga, e avviare i processi di pianificazione in modo che stiamo lavorando in modo più efficiente ed efficace.

Aggiornamento

Quindi diciamo che ho scelto la Carta Leggera, Rosso Il Colore, La Stampa.Come posso ottenere il prezzo giusto?In due dimensioni tabella ho tre possibili coppie Rosso/Stampa, Rosso/Luce, Di Stampa/Luce.Purtroppo io non riesco a calcolare il prezzo in evoluzione della formula ho solo una prezzo finale dopo tutte le scelte sono state fatto.

Bene, ho semplificato di cui sopra, ma supponiamo il caso più semplice di prima.

Non ho detto nella precedente tabella, che ogni prezzo rappresentati.Il costo per tutto per pagina, ad eccezione di associazione.Il costo per l'associazione è stato per limite voce.

Quindi nel tuo esempio si sceglie la carta Leggera, rosso, stampa.Ogni pezzo di carta rossa è di $0.05 (carta costosa!) e ogni stampa è di $0.001 (a basso costo di stampa), quindi il costo per pezzo di carta stampata è di $0.051.Se si sta facendo 300 copie, quindi il costo totale è di $15.30.

In quanto associazione è elencato per limite voce, allora si potrebbe aggiungere vincolanti per, e potrebbe essere vincolante 50 pagine, per un totale di 6 elementi associati, 300 pagine.Sappiamo già che il costo di everythign precedente, in modo che il costo aggiuntivo di 6 elementi associati (a $0.50 per elemento) è di $3.00, per un totale di $18.30.

Ci sono alcune cose che si sta andando ad avere a che fare al di là di semplificazione ho specificato sopra, però:

Nella matrice che ti ho lasciato il numero di celle vuote.In alcuni casi questo perché i processi/oggetti sono incompatibili (non riesco a collegare piegato, per esempio), ma in altri casi non c'è conflitto, ma non costa nulla.Quindi il tuo esempio di red/regolare vs regolare/rosso - dal momento che stiamo aggiungendo i prezzi insieme alternativo di combinazione, non costa nulla.

Vediamo se riesco a rendere il tutto più chiaro...

La selezione in carta leggera, rosso, stampato, rilegato (300 pagine, 6 elementi associati) di passare attraverso il tavolo e trovare tutti i prezzi che si trovano all'interno che impostare:

Pricing matrix shows cells where options collide to provide pricing information

Si ricerca per tutti gli elementi della tabella (sia rosso/luce e la luce/rosso) e poi prendere i prezzi e moltiplicare per la quantità singolarmente, poi sommarli.L'intersezione di tutte queste selezioni è evidenziato in verde.(Incasinato la luce della carta/carta leggera colorazione dovrebbe essere anche verde)

Ho rimosso la stampa/stampa di combinazione, perché non funziona con questo metodo (speravo di semplificare le cose, ma in realtà rende le cose più difficili) Se si desidera specificare la stampa fronte / retro avrete bisogno di un altro elemento della tabella (Stampa Inverso, per esempio) e puoi selezionare sia la stampa e la stampa di retromarcia.In alternativa sono due elementi, "stampa lato singolo" e "stampa doppio lato".

Tenete a mente che, mentre ho elencato tutti i prezzi in ogni cella, la realtà è che ogni cella descrive in realtà in un paio di circostanze:

  1. Riferimento a una tabella dei prezzi
  2. Senza costo
  3. Vincolo (combinazione non è possibile)

Il riferimento #1 si riferisce a un'altra tabella che contiene i prezzi e una terza dimensione.Per esempio, la cella a combinazione "luce/vincolato" farebbe riferimento a una tabella che presenta le seguenti tre caratteristiche:

  • Per la pagina di prezzo
  • Per limite il prezzo dell'oggetto
  • Per lavoro (setup) prezzo

Questi sarebbero sommati a seconda del numero di pagine e gli elementi associati, e quindi il costo per posto di lavoro è aggiunto il top.

Più complessità!Woo!

Questo può funzionare per le vostre esigenze, ma cosa succede se si dispone di processi che sono solo incompatibile in certe situazioni più complesse?

Ora siamo in grado di coprire il caso generale di un processo o di un oggetto in conflitto con un altro.Tuttavia, non possiamo gestire qualcosa di più complesso.

Supponiamo che la luce, la carta può essere stampata, e può essere piegato, ma non può essere stampato E piegato.Non possiamo mettere un vincolo su di Stampa/Fold, perché gli altri documenti possono essere stampati e piegati.

Ci sono alcune cose che si possono fare:

  • Aggiungere una terza dimensione, ma allora si potrebbe avere una sequenza che non può essere fatto se 4 cose sono mescolati insieme, il che significa un'altra dimensione, ecc
  • Utilizzare vettori (map/reduce)
  • Aggiungere uno strato di astrazione

I vettori sono bello, ma potrebbe essere troppo per questa applicazione.Fondamentalmente è il primo elemento, ma senza definire quante dimensioni si può avere - hanno come molte dimensioni, come si dispone di oggetti, in modo che ogni possibile combinazione può essere rappresentato.

L'ulteriore livello di astrazione è un compromesso tra i due.Idealmente non sono molto numerosi conflitti che sono più complesse di due elementi, ma quando lo fai, è possibile definire un nuovo oggetto che rappresenta una combinazione.Quindi in questo caso si potrebbe avere un nuovo oggetto/processo che è la combinazione di stampa e di piegatura, e si ha un vincolo alla colonna con la carta leggera.

Si può fare questo solo per i vincoli, nel qual caso non modifica le algoritmo di prezzo (vale a dire, i prezzi arriva ancora dalla somma dei singoli processi e oggetti.)

In alternativa, è possibile utilizzare un algoritmo che consente di selezionare la combinazione più grande - così, invece di cercare il database per la Luce, Rosso, Stampa, Piega devi prima cercare nel database di combinazioni, che dovrebbe restituire il più grande combinazione di Luce, Rosso, PrintFold, e poi il prezzo è normalmente.

Infine, si potrebbe cercare il database sia per i singoli e combinatoria di elementi, e dove c'è un conflitto (doppia prezzi di combinazione e ai singoli elementi) e poi si seleziona:

  • Il costo maggiore
  • Il più grande combinazione
  • La priorità dei costi (vale a dire, ogni costo è una priorità, e voi li rispetto dei conflitti e di scegliere quello che ha la precedenza)

-Adam

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top