Ratschlag zur Implementierung eines Einkaufswagens mit Playframework

8

Ich lerne, playframework zu verwenden, indem ich Code zum Implementieren von webstore für den Verkauf von Elementen schreibe. Ich habe den Bereich Admin mit den Modulen crud und secure implementiert. Nun möchte ich ein shopping cart , zu dem ein Benutzer Elemente hinzufügen und zur Kasse gehen kann.

Mein Wissen über E-Commerce ist minimal, aber ich habe einige Lehrbücher durchgesehen, die Einkaufswagen und einige Webshop-Funktionen mit servlets implementiert haben. In den Büchern enthielt der Einkaufswagen jeweils Set von CartItem s davon enthielt eine Instanz von Product und quantity . Nachdem der Benutzer Artikel zum Warenkorb hinzugefügt hatte, wurde der Warenkorb in user session gespeichert.

Wenn der Benutzer also zur Warenkorb-Detailseite ging, wurden alle hinzugefügten Artikel angezeigt. Nur wenn die Sitzung gelöscht wurde (entweder aufgrund eines Sitzungs-Timeouts wie auf dem Server definiert oder wenn die Bestellung aufgegeben wurde), co_de% s wurden aus CartItem entfernt.

Ich denke, ich kann den Cache im playframework verwenden, um das oben genannte zu tun. Nach dem Hinzufügen eines CartItem zu ShoppingCart-Instanz. Ich kann

%Vor%

und später, auf einer anderen Seite, kann ich den Wagen und seinen Inhalt abrufen, verarbeiten und den Wagen leeren.

%Vor%

Ist das der richtige Weg, um das zu tun? Wenn die Art, wie ich denke, nicht korrekt ist, bitte hilf mir mit Vorschlägen.

    
Damon Julian 30.08.2011, 13:34
quelle

2 Antworten

13

Falsch. Entschuldige, dass du so hart bist, aber was du machst, scheitert vielleicht schrecklich.

Play ist teilen nichts und staatenlos. Alle relevanten Daten MÜSSEN in der Datenbank gespeichert werden. Das bedeutet, dass Sie die Daten des Einkaufswagens beibehalten müssen, wenn der Benutzer ein neues Element hinzufügt, und entfernen Sie es, sobald die Transaktion abgeschlossen ist.

Warum können Sie den Cache nicht verwenden? Da der Cache flüchtig ist und die darin enthaltenen Elemente ohne vorherige Warnung entfernt werden können. Das bedeutet, dass Ihr Cache jederzeit einen Nullwert (Element nicht gefunden) zurückgeben kann und Sie eine NullPointerException in Ihrem Code erhalten und Ihr Benutzer den Warenkorb verloren hat.

Cache dient nur dazu, die Leistung zu verbessern, aber Sie können nicht erwarten, dass sie alle Elemente enthält, die Sie immer benötigen.

Sie sollten Ihr ShopCart in eine Entity (wenn es keine ist) verwandeln und etwas hinzufügen:

%Vor%

Verwenden Sie dann diese Methode, um den Einkaufswagen vor der Verarbeitung abzurufen.

    
Pere Villega 30.08.2011, 14:39
quelle
1

Ich habe nicht viel Erfahrung mit Play! aber ich denke es ist großartig. Deine Idee sollte gut funktionieren. Ich würde ein Timeout für das zwischengespeicherte Einkaufswagenobjekt hinzufügen, wie in:

%Vor%

Der obige Code speichert den Einkaufswagen 30 Minuten lang.

Beachten Sie, dass Cache.get den Wert null zurückgibt, sodass sich der Code für die Verarbeitung zu:

ändern sollte %Vor%

Sie sollten das Cart-Objekt wahrscheinlich auch nach einem erfolgreichen Aufruf von processOrder (...) aus dem Cache entfernen.

%Vor%

Hoffe, das hilft.

    
buritos 30.08.2011 14:10
quelle