Κατανεμημένες Εφαρμογές και Ηλεκτρονικό Εμπόριο

Άσκηση 3.1

Ανάπτυξη μια απλής αρχιτεκτονικής τριών στρωμάτων για εφαρμογή ηλεκτρονικού εμπορίου

Θέση αρχείων = /ExerciseCode/C3/ThreeOne/

Για αυτή την άσκηση υπάρχουν τα εξής αρχεία / κλάσεις:

Σε αυτή την άσκηση θέλω να αναπτύξετε κώδικα για τον πελάτη σε μια πολύ απλή εφαρμογή ηλεκτρονικού εμπορίου η οποία σχεδιάστηκε σε τρία επίπεδα. Το πρώτο επίπεδο (το επίπεδο βάσης δεδομένων) αποτελείται από μια βάση δεδομένων η οποία αναπαριστάται από ένα αντικείμενο Properties και ένα διακομιστή ο οποίος την χρησιμοποιεί. Το αντικείμενο Properties είναι μια δομή δεδομένων βασισμένη σε αρχείο η οποία έχει την ίδια λειτουργικότητα με ένα αντικείμενο Hashtable. Η βάση δεδομένων που σχετίζεται με αυτή τη δομή δεδομένων είναι:

Sh1=Shirts*200*
Tie=Ties*1200*
Scsb=Blue Socks*1500*
Scsy=Yellow Socks*200*

Είναι μια απλή βάση δεδομένων η οποία συσχετίζει ένα μοναδικό κλειδί με το όνομα ενός προϊόντος και την τρέχουσα ποσότητα του προϊόντος που υπάρχει στο απόθεμα. Έτσι για παράδειγμα, η πρώτη γραμμή δηλώνει πως  Sh1 θα είναι το κλειδί γι τα πουκάμισα και αυτή τη στιγμή υπάρχουν 200 στο απόθεμα. Στη βάση δεδομένων οι αστερίσκοι χρησιμοποιούνται για να διαχωρίσουν υποπεδία.

Ο διακομιστής είναι πολύ απλός: το μόνο που κάνει είναι συνεχείς επαναλήψεις περιμένοντας για μηνύματα από πελάτες και ενεργόντας σε αυτά.

Το μεσαίο στρώμα υλοποιείται χρησιμοποιώντας επιχειρηματικά αντικείμενα τα οποία ορίζονται στην κλάση Product. Αυτή η κλάση έχει δυο μεταβλητές (και οι δυο είναι συμβολοσειρές). Η πρώτη συμβολοσειρά αναπαριστά την ποσότητα σε απόθεμα του προϊόντος και η δεύτερη το όνομα του προϊόντος. Η κλάση Product αποτελείται από δυο μεθόδους οι οποίες αντλούν τις τιμές των μεταβλητών από τη βάση δεδομένων, μια στατική μέθοδο η οποία αρχικοποιεί τη βάση δεδομένων που και ένα constructor του αντικειμένου. Ο constructor παίρνει ένα κλειδί ως όρισμα και δημιουργεί ένα αντικείμενο το οποίο σχετίζεται με το κλειδί. Αν το κλειδί δεν υπάρχει στη βάση δεδομένων τότε πάλι δημιουργείται ένα αντικείμενο Product; ωστόσο και οι δυο μεταβλητές του θα έχουν την τιμή "Error".

Το τελευταίο στρώμα είναι ο πελάτης. Αυτό αποτελείται  από ένα παράθυρο το οποίο περιέχει τρία κουμπιά, ένα πεδίο κειμένου και μια περιοχή κειμένου. Όταν κάνουμε κλικ στο κουμπί product,  θα σταλεί ένα μήνυμα στον διακομιστή το οποίο θα ζητά το όνομα του προϊόντος που αντιστοιχεί στο κλειδί το οποίο υπάρχει στο πεδίο κειμένου. Όταν αυτό επιστραφεί από τον διακομιστή, θα παρουσιαστεί στην περιοχή κειμένου. Όταν κάνουμε κλικ στο κουμπί quantity, θα σταλέι ένα μήνυμα στο διακομιστή το οποίο  θα ζητά την ποσότητα στο στοκ του προϊόντος το οποίο αντιστοιχεί στο κλειδί το οποίο υπάρχει στο πεδίο κειμένου. Όταν επιστραφεί η απάντηση από τον διακομιστή, θα παρουσιαστεί στην περιοχή κειμένου. Σε κάθε μια από αυτές τις περιπτώσεις, ο διακομιστής θα στείλει μια συμβολοσειρά η οποία αναπαριστά τα ζητούμενα δεδομένα. Αν ο διακομιστής δεν μπορεί να βρει το ζητούμενο προϊόν στη βάση δεδομένων του επιστρέφει έναν αστερίσκο. το τρίτο κουμπί τερματίζει την εφαρμογή.

Ο πελάτης επικοινωνεί με τον διακομιστή χρησιμοποιώντας ένα απλό πρωτόκολλο: αν επιθυμεί την ποσότητα στο στοκ ενός προϊόντος θα στείλει μια συμβολοσειρά η οποία θα αποτελείται από το γράμμα Q ακολουθούμενο από το κλειδί. Αν επιθυμεί το όνομα του προϊόντος θα στείλει το γράμμα I ακολουθούμενο από το κλειδί.

Θέλω να συμπληρώσετε τον κώδικα που στέλνει μηνύματα στον διακομιστή όταν ζητάται το όνομα κάποιου προϊόντος και επεξεργάζεται τη συμβολοσειρά που επιστρέφεται από τον διακομιστή.  έχω ήδη υλοποιήσει τον έλεγχο λαθών που απαιτείται. Ο κώδικας που ζητείται θα πρέπει να είναι μόνο δυο σειρές.

Πρέπει να κάνετε τα εξής: