duda carrito

Hola a todos estoy realizando mi primera aplicacion sobre una tienda virtual y tengo una duda a la hora de guardar los datos de la cesta. Es decir, cuando el cliente o invitado hace click en el boton añadir a cesta ese producto se añade a la cesta y despues en la pagina donde se muestra todos los productos que tengo añadido en la cesta hay un boton Tramitar Pedido. mi duda es cuando le hago click en "añadir cesta" ese producto que guardo en la cesta, se guarda en la base de datos tambien o se guarda cuando le doy a tramitar pedido. Espero que me ayudeis estoy empezando.

Gracias

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Depende de ti

Es como tú lo quieras implementar. Puedes guardar los carritos en la base de datos o solamente en la sesión, o en cookies.

Imagen de Marce

Si es como dice @ezamudio,

Si es como dice @ezamudio, pero creo que hay varias vertientes en tu decisión por ejemplo:

  • Guardar el carrito en tu BD en caso de querer guardarlo como un recurso del usuario, si el usuario lo guarda para seguir en otra ocasión con el carrito para levantar su pedido
  • Si no incluye esa funcionalidad, puedes guardar en la BD se haga o no el pedido, en caso de no hacerse el pedido se borra de la BD y listo, si se hace el pedido pasar estos datos del carrito a otra tabla que especifique que ya han sido pedidos y eliminarlos de la tabla del carrito
  • Y la otra es la ya mencionada, guardar el carrito en la sesión del usuario, de igual forma si desea guardarlo para después continuar, de la sesión pasan a la BD, y si no simplemente al terminar la sesión Caput a los datos; o en su defecto al hacer el pedido también pasan a la BD

Para mi lo más recomendable es en la sesión hasta que el usuario decida que hacer con su carrito de compras, puedes utilizar un JavaBean para controlar este carrito e irlo guardando en la sesión.

Pero como dice @ezamudio esa ya es decisión tuya

Imagen de Jvan

A mi se me hace mejor que

A mi se me hace mejor que los almacenes en la sesión y cuando el usuario esté seguro de cuales items y cuales no va a comprar los almacenes en la BD, porque te evitas estarte conectando cada ves que mete un item y cada ves que quita un item.

Saludos.

Imagen de ezamudio

Ventajas de cada enfoque

Cada una de estas soluciones tiene sus ventajas y desventajas.

Guardar en base de datos permite que un usuario registrado tenga cosas en su carrito por tiempo prolongado (como cuando dejas algo en tu carrito de Amazon y un mes después ahí sigue). La desventaja es que sólo los usuarios registrados pueden hacer eso y si tienes muchos usuarios, podrías estar llenando la base de datos de puros carritos (aunque realmente un carrito son solamente referencias a tu inventario, de modo que no ocupan mucho espacio).

Guardar en sesión permite que usuarios no registrados puedan llevar un carrito, aunque cuando se termine su sesión lo van a perder. Pero si les permitiste tener un carrito tal vez se animen a registrarse e incluso a comprar y por el contrario, si los obligas a registrarse para que puedan llevar un carrito, puedes desanimar a algunos usuarios y pierdes posibles clientes. Guardar en sesión además ocupa memoria; muchos usuarios usando el sitio y con varios artículos en su carrito podrían ocupar muchísima memoria y afectar el desempeño de tu aplicación. Si guardas en sesión, asegúrate de que sean solamente las referencias (llaves primarias) de los artículos, y cuando quieras presentar el carrito, vas por la descripción de cada artículo para generar la página y así no ocupas tanta memoria.

La otra opción, guardar el carrito en cookies, puede ser más engorrosa, pero pues te da por un lado la ventaja de que esos datos realmente se guardan en el navegador del cliente. Además un usuario no registrado puede tener carrito, y no es necesario que siquiera le abras una sesión, lo cual te permite recibir a muchos invitados y que hagan sus carritos sin incurrir en altos costos en memoria o almacenamiento en base de datos. Igual que en sesión, tienes que guardar solamente las llaves primarias y de hecho tienes que codificar todo a una cadena que quepa en un cookie (no recuerdo el límite de las cadenas que puedes guardar en cookies pero eso lo investigas). Y cuando el usuario quiere ver su carrito, vas a la base de datos por las descripciones de los artículos que contiene para generar la página.

Por conexiones a la base de datos no deberías preocuparte si tienes un pool de conexiones bien configurado y tu base de datos bien indexada y optimizada, puedes hacer todas las consultas que necesites, para eso están hechas.