Pregunta

Quiero montar una tienda en la que los productos tengan un pequeño asistente mediante el cual luego se determine el precio.En este caso me refiero a productos de impresión.

Entonces, por (un pequeño) ejemplo, cuando vienes a la tienda y quieres imprimir una tarjeta de presentación, puedes decidir si quieres imprimir en blanco y negro o en color, si quieres elegir papel grueso o fino, si quieres para imprimir 100, 200, 500 o 1000 piezas y así sucesivamente.

Después de todo, habrá un precio por, digamos:blanco y negro, papel grueso, 200 piezas => 40,-$

En realidad tienes muchas más opciones para elegir.Como puedes imaginar, hay muchos precios, para los cuales hay sin fórmula.

Entonces mi pregunta es:¿Cómo puedo manejar los precios?

Mi primera idea:Patrón decorador.

Pero cuando lo pienso, no es una muy buena idea.Como dije no existe una fórmula real, además tengo que generar el asistente (que puede ser diferente si quieres imprimir tarjetas de felicitación).También quiero poder cambiar el precio a través de una interfaz de administración o agregar un producto o agregar una nueva "decisión" como "¿quieres papel brillante?" a un producto o eliminar uno (y aún así mantener los precios intactos).

Así que ahora estoy pensando en usar un árbol para cada producto en el que pueda agregar un nivel (una nueva decisión), niveles de resort, etc.

Otra idea es construir algún tipo de objetos clave a través de las decisiones y buscar el precio en una tabla de precios.Un poco como un Diccionario en el que agrego las decisiones y después de todo genero una clave para buscar el precio en una tabla de precios.

Entonces, antes de crear el prototipo, me preguntaba si estoy ciego y no veo la solución obvia o tal vez hay otra forma que es más elegante y no la conozco.

¿Fue útil?

Solución

Bueno, la idea que tengo es bastante compleja, pero tu deseo también lo es.

El problema con el asistente que estás describiendo es que después de haber hecho todas sus elecciones, es posible que quieran volver al punto 2 y cambiar una cosa para ver cómo cambia el precio, pero la forma en que estás construyendo tu asistente puede afectar la posibilidad de realizar elecciones posteriores y dar como resultado un conjunto de código bastante complejo que debe personalizar para cada producto, en lugar de almacenar todo correctamente en una base de datos de modo que el código pueda hacer todo lo necesario y cualquier cambio en el producto se realice. en la base de datos, no cambios de código.

En primer lugar, debe comprender que tiene una lógica de fijación de precios y, idealmente, esta será independiente de la presentación.En otras palabras, debería poder presentar un asistente paso a paso a un cliente y una sola página con opciones de casillas de verificación y campos a otro y hacer que creen lo mismo con las mismas restricciones.

Trate de evitar diseñar la base de datos de manera que no pueda hacer una cosa ni la otra.En otras palabras, restringes las opciones futuras (y la flexibilidad del cliente) si haces un asistente de estilo "elige tu propia aventura".La razón es que si sigo 10 pasos y luego cambio el paso 2, tengo que seguir 8 pasos más; esto puede estar bien si garantizas que no estoy duplicando las elecciones que ya hice, pero si Solo cambiando el color del papel, no quiero volver a hacer las mismas 8 opciones.Si sigue esta ruta, asegúrese de mantener mucho estado para que las elecciones que tomaron anteriormente aparezcan como predeterminadas la próxima vez.

Consideraría agregar un nivel más de abstracción a la base de datos.En lugar de especificar la ruta a través de un árbol que el usuario puede seleccionar, me gustaría ver una matriz con cada opción, producto y proceso que muestre la compatibilidad.

Por ejemplo, tengo tres tipos de papel, 3 colores y 3 procesos:

  • Papel

    • Luz
    • Regular
    • Tarjeta
  • Color

    • Rojo
    • Azul
    • Verde
  • Proceso

    • Imprimir
    • Doblar
    • Unir

Entonces tendría precios para cada partido:

        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                            

Los espacios vacíos indican elementos que no se pueden mezclar.
Entradas notables:

  • Impresión e impresión combinadas: la impresión a doble cara desgasta o atasca la máquina con más frecuencia.
  • No puede pasar artículos por la máquina plegadora más de una vez (una operación de plegado y plegado está en blanco), pero puede enumerar diferentes tipos de plegado y los papeles a los que se aplican.
  • No puedes unir artículos doblados
  • No dupliqué elementos en la matriz (es decir, imprimir en papel liviano es lo mismo que imprimir en papel liviano; dependiendo de cómo elabore sus consultas, querrá indicar esto o formar la tabla de una manera que no importe). )

Esto es sólo una muestra de una encarnación simple: cada precio sería en realidad un enlace a otra tabla que proporciona el precio de cada uno si la cantidad está dentro de un cierto rango (es decir, 100 podría ser más barato que 10).También se aplicaría si el cargo es por hoja de papel, por operación o por pedido, y esto podría acumularse (por lo que podría tener un cargo vinculante de 0,001 por hoja de papel para tener en cuenta el desgaste de las cortadoras, y 0,50 por libro encuadernado por el precio de la pieza, luego un cargo de instalación de $5 por la operación de encuadernación en total)

Esto rápidamente se volverá bastante complejo dada la gran cantidad de cosas que tienes y que puedes hacer con otras cosas.

Pero una vez ingresados ​​los datos, le brindará flexibilidad ilimitada para especificar los costos y presentarlos al usuario.Es posible que, por ejemplo, descubra que vale la pena poner cada modelo diferente de máquina de impresión en su propia columna (en lugar de simplemente llamarlas a todas impresoras) y encontrar el precio de impresión más bajo para el cliente según el tipo de papel, el color y las operaciones de impresión. .

También puede completar la matriz con mano de obra (tiempo) para poder dar estimaciones de tiempo en el mismo lugar que las estimaciones de precios.

Ya sea que hagas un asistente o muestres todo en la página a la vez, este backend lo admitirá.Mire lo que hace Dell con las configuraciones de portátiles: no se pueden conseguir ciertas cosas con otras.Entonces, si muestra todas las opciones en una página, cuando cambien de papel normal a cartulina, puede avisarles con: "También has elegido plegar, que es incompatible con la cartulina".¿Estás seguro de que deseas hacer este cambio?"

Pero, ante todo, primero escriba los casos de uso y diseñe el sistema en su conjunto.Si te lanzas ahora y comienzas a codificar algo así de complejo, tomarás decisiones ahora que serán muy difíciles de deshacer más adelante, pero más tarde descubrirás que tienes que hacer cambios importantes o comprometer una característica.

Por supuesto, elegir tu propio estilo de aventura es mucho más fácil de diseñar y desarrollar, el único problema es que si agregas un nuevo proceso o papel, es posible que tengas que actualizar 200 árboles y agregar 50 árboles nuevos.Cada cambio en el taller requiere la implementación de una nueva base de datos (y posiblemente de software), lo que retrasa la recuperación de los gastos de capital.Si lo haces muy flexible desde el principio, será más difícil ahora y más fácil y rápido más adelante.

Además, no limita a sus clientes a tres opciones: si realmente desean imprimir con una prensa de 4 colores por un lado y una fotocopiadora económica por el otro, pueden explorar esa opción si los procesos y materiales son compatibles.Después de 20 productos/procesos, realmente no se puede completar completamente el árbol.

Por último, le brinda un control muy, muy preciso sobre los costos.Si su proceso de negocio rastrea el uso y el costo de la máquina (mantenimiento, etc.) a un nivel detallado, puede hacer una oferta inferior a la de su competidor porque sabe que el costo de su máquina es menor. exactamente 0,00234 por página, mientras que se quedan con la suposición genérica.Si comienza a realizar un seguimiento utilizando este sistema y hace que los empleados realicen un seguimiento de los problemas, el mantenimiento, etc., puede encontrar correlaciones muy extrañas, como que la cartulina roja le cuesta más en la máquina plegadora porque se atasca con más frecuencia que la azul (por cualquier motivo).Puede ajustar sus precios (hasta el enésimo grado, en este sistema), hablar con el fabricante de papel, dejar de ofrecer esa opción o utilizar otras tácticas para exprimir el sistema.Si algunas de sus máquinas requieren operadores calificados, puede agregar empleados a la matriz con su salario y comenzar a programar trabajos para que trabajen de manera más eficiente y efectiva.

Actualizar

Digamos que elijo el papel claro, rojo Color, Impresión.¿Cómo llego a la ¿Precio correcto?En un entorno bidimensional En la tabla tengo tres pares posibles Rojo/Impresión, Rojo/Claro, Impresión/Luz.Lamentablemente no puedo calcular el precio en una fórmula en evolución, solo tengo una precio final después de que se hayan realizado todas las opciones hecho.

Bueno, he simplificado lo anterior, pero supongamos primero el caso simple.

No mencioné en la tabla anterior lo que representaba cada precio.El coste de todo es por página, excepto la encuadernación.El costo de encuadernación fue por artículo encuadernado.

Entonces, en su ejemplo, elige papel claro, rojo, imprimir.Cada trozo de papel rojo cuesta $0,05 (¡papel caro!) y cada impresión cuesta $0,001 (impresión barata), por lo que el costo por trozo de papel impreso es $0,051.Si está haciendo 300 copias, el cargo total es de $15,30.

Dado que la encuadernación se enumera por artículo encuadernado, puede agregar encuadernación al orden anterior y podría encuadernar 50 páginas juntas, para un total de 6 artículos encuadernados, 300 páginas.Ya conocemos el costo de todo lo anterior, por lo que el costo adicional de 6 artículos encuadernados (a $0,50 por artículo) es $3,00, para un nuevo total de $18,30.

Sin embargo, hay algunas cosas que tendrás que hacer más allá de la simplificación que he especificado anteriormente:

En la matriz he dejado muchas celdas vacías.En algunos casos, esto se debe a que los procesos/objetos son incompatibles (no se pueden unir elementos doblados, por ejemplo), pero en otros casos no hay conflicto, pero no cuesta nada.Entonces, su ejemplo de rojo/regular frente a regular/rojo: dado que sumamos los precios, la combinación alternativa no cuesta nada.

A ver si puedo dejar esto más claro...

La selección de papel ligero, rojo, impreso, encuadernado (300 páginas, 6 artículos encuadernados) recorre la tabla y encuentra todos los precios que entran dentro de ese conjunto:

Pricing matrix shows cells where options collide to provide pricing information

Buscas todos los elementos en la tabla (tanto rojo/claro como claro/rojo) y luego tomas los precios y los multiplicas por la cantidad individualmente, luego los sumas.La intersección de todas estas selecciones se muestra en verde.(Error en el color del papel claro/papel claro; también debería ser verde)

Eliminé la combinación impresión/impresión porque no funciona con este método (esperaba simplificar las cosas, pero en realidad las complica) Si desea especificar la impresión a doble cara, necesitará otro elemento en la tabla (Imprimir Invertir, por ejemplo) y seleccionaría imprimir e imprimir al revés.Alternativamente, tenga dos elementos, "imprimir una cara" e "imprimir dos caras".

Tenga en cuenta que, si bien he enumerado cada precio en cada celda, la realidad es que cada celda en realidad describe algunas circunstancias:

  1. Referencia a una tabla de precios
  2. Gratis
  3. Restricción (la combinación no es posible)

La referencia en el n.° 1 se refiere a otra tabla que contiene los precios y una tercera dimensión.Por ejemplo, la celda en la combinación "ligero/encuadernado" haría referencia a una tabla que tiene los tres atributos siguientes:

  • Precio por página
  • Precio por artículo encuadernado
  • Precio por trabajo (configuración)

Estos se sumarían de acuerdo con la cantidad de páginas y elementos encuadernados, y luego se agregaría el costo por trabajo.

¡Más complejidad!¡Cortejar!

Esto puede funcionar para sus necesidades, pero ¿qué pasa si tiene procesos que sólo son incompatibles en determinadas situaciones más complejas?

Ahora podemos cubrir el caso general de un proceso u objeto en conflicto con otro.Sin embargo, no podemos abordar nada más complejo.

Supongamos que el papel liviano se puede imprimir y doblar, pero no se puede imprimir Y doblar al mismo tiempo.No podemos imponer restricciones a Imprimir/Plegar porque otros papeles se pueden imprimir y plegar.

Hay algunas cosas que puedes hacer:

  • Agregue una tercera dimensión, pero entonces podría tener una secuencia que no se puede hacer si se mezclan 4 cosas, lo que significa otra dimensión, etc.
  • Usar vectores (mapear/reducir)
  • Agrega una capa de abstracción

Los vectores son bonitos, pero pueden resultar excesivos para esta aplicación.Básicamente es el primer elemento, pero sin definir cuántas dimensiones puedes tener: tienes tantas dimensiones como objetos, por lo que se puede representar cualquier combinación posible.

La capa adicional de abstracción es un compromiso entre los dos.Idealmente, no tendrá muchos conflictos que sean más complejos que dos elementos, pero cuando los tenga, definirá un nuevo objeto que represente una combinación.Entonces, en este caso, es posible que tenga un nuevo objeto/proceso que es la combinación de impresión y plegado, y tiene una restricción en la columna con papel liviano.

Puede hacer esto solo para restricciones, en cuyo caso no modifica su algoritmo de fijación de precios (es decir, la fijación de precios aún proviene de la adición de procesos y objetos individuales).

Alternativamente, puede usar un algoritmo que seleccione la mejor combinación, por lo que en lugar de buscar en la base de datos Claro, Rojo, Imprimir, Plegar, primero buscará combinaciones en la base de datos, lo que devolverá la mejor combinación de Claro, Rojo, ImprimirPlegado, y luego ponerle precio normalmente.

Por último, puede buscar en la base de datos artículos individuales y combinados, y cuando haya un conflicto (precio doble de artículos combinados e individuales), seleccione:

  • El mayor costo
  • la mayor combinación
  • Los costos priorizados (es decir, cada costo tiene una prioridad asignada, los comparas durante los conflictos y eliges el que tiene prioridad)

-Adán

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top