Εν αρχή ην …. ο σχεδιασμός

Θα γνωρίζετε υποθέτω εκείνη τη λαϊκή (και σοφή) ρήση που λέει πως “κάλιο γαϊδουρόδενε παρά γαϊδουρογύρευε”. Κι ‘μεις αυτά τα ράβε-ξήλωνε δε τα συμπαθούμε διόλου. Έτσι θα ξεκινήσουμε σχεδιάζοντας όσα θέλουμε να γίνουν έχοντας κατά νου το προηγούμενό μας άρθρο σχετικά με την μαζική αποστολή μηνυμάτων email (ΌΧΙ spam).

Θέλουμε λοιπόν να μπορούμε να στέλνουμε newsletters σε εγγεγραμμένους χρήστες, να τους δίνουμε την δυνατότητα να αποχωρήσουν από την λίστα μας (μη ξεχνάμε τον 3471/2006) και φυσικά να έχουμε μια βολική μέθοδο να τους καλούμε να γραφτούν.

(Μια) εικόνα (σχήμα) = χίλιες λέξεις

Συνοπτικά θέλουμε λοιπόν ένα σύνολο δραστηριοτήτων όπως αυτές που περιλαμβάνει το Σχήμα 1.

overview-1024x602

Σχήμα 1. Συνολική εικόνα δράσεων

Η εγγραφή και διαγραφή χρήστη είναι αυτονόητα μέρη της εφαρμογής μας, όπως είναι και η χρήση βάσης δεδομένων για την αποθήκευση της πληροφορίας. Στη συνέχεια θα δούμε τι πληροφορία θα κρατάμε για κάθε χρήστη, πώς θα διαγράφουμε τις ευαίσθητες πληροφορίες του χρήστη κατά τη διαγραφή του αλλά θα μπορούμε επίσης να κρατάμε ανώνυμα στοιχεία εγγραφών και διαγραφών αλλά και πόσο βολική μπορεί να εξελιχθεί η βάση μας για τον προσδιορισμό της λίστας των αποδεκτών του newsletter.

Επαναχρησιμοποιήσιμος κώδικας

Φυσικά όλα αυτά τα θέλουμε έτσι φτιαγμένα ώστε να μπορούμε να τα επαναχρησιμοποιήσουμε κατά βούληση. Για το λόγο αυτό θα χρησιμοποιήσουμε ένα widget (προσθήματος) που θα μπορεί να φορτωθεί σε οποιαδήποτε σελίδα με τον ελάχιστο δυνατό κόπο και θα προσφέρει πλήρη λειτουργικότητα χωρίς να πρέπει η σελίδα στην οποία προστέθηκε να γνωρίζει λεπτομέρειες. Σκεφτείτε κάτι σαν “το γράφω μια φορά και το χρησιμοποιώ παντού” και ίσως το δίνω και στους φίλους μου για να το χρησιμοποιήσουν κι αυτοί. Ένα widget λοιπόν λειτουργεί (απλουστευμένα) όπως φαίνεται στο Σχήμα 2.

widget

Σχήμα 2. Η γενικευμένη (και απλουστευμένη) συνολική λειτουργία ενός widget

Μόλις ολοκληρώσουμε την ανάπτυξη θα θέλαμε να απαιτείται μόνο κάτι σαν το

για την προσθήκη του widget και συνεπώς της πλήρους λειτουργικότητας που σχεδιάζουμε σε οποιαδήποτε ιστοσελίδα.

Η εγγραφή χρήστη

Για την εγγραφή του χρήστη θα ακολουθήσουμε ένα τυπικό διάγραμμα ροής πληροφορίας όπου έχουμε 2 επίπεδα ελέγχου της πληροφορίας, έναν στο φυλλομετρητή (browser) και ένα στον διακομιστή (server). Σε όλες τις περιπτώσεις ενημερώνουμε τον χρήστη για την επιτυχία ή αποτυχία των δράσεών του με (όχι και τόσο μη ενοχλητικά) μηνύματα JavaScript (τα οποία όμως πανεύκολα αλλάζουν σε overlays :-). Το Σχήμα 3 παρουσιάζει το διάγραμμα ροής πληροφορίας για την αλληλεπίδραση του χρήστη κατά την εγγραφή του.

registration_flow_diagram

Σχήμα 3. Διάγραμμα ροής πληροφορίας κατά την εγγραφή

Μένει ακόμα να προσδιορίσουμε τι πληροφορία θα κρατήσουμε για κάθε εγγραφή χρήστη. Στο προκείμενο θεωρούμε πως το ονοματεπώνυμο (ώστε να μπορεί το κάθε μήνυμα να απευθύνεται προσωπικά σε κάποιον) και η διεύθυνση email είναι τα απολύτως απαραίτητα. Για τα “extra-δάκια” σκεφτήκαμε να κρατάμε και την ημερομηνία εγγραφής και (πιθανής) αποχώρησης. Το Σχήμα 4 δείχνει το διάγραμμα οντοτήτων συσχετίσεων (βέβαια εδώ έχουμε μόνο μια οντότητα :-).

registered_users_schema

Σχήμα 4. Διάγραμμα οντοτήτων συσχετίσεων για κάθε εγγεγραμμένο χρήστη

Όπως θα δούμε και στη συνέχεια στην συγκεκριμένη υλοποίηση χρησιμοποιήσαμε για RDBMS την sqlite. Έτσι για να φτιαχτεί ο παραπάνω πίνακας η εντολή sql είναι:

CREATE TABLE "registered_users" (
  "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  "name" text NULL,
  "surname" text NULL,
  "email" text NULL,
  "subscription_date" text NOT NULL,
  "unsubscription_date" text NULL
);

Είναι μια ώρα δύσκολη, του αποχωρισμού (του χρήστη)

Για την αποχώρηση του χρήστη το διάγραμμα ροής πληροφορίας (Σχήμα 5) είναι όμοιο με το αντίστοιχο της εγγραφής για την αλληλεπίδραση του χρήστη (είμαστε σε υψηλό επίπεδο αφαίρεσης) με την μόνη διαφορά το βήμα 8. Στη διαγραφή το 8ο βήμα δεν είναι η εγγραφή στη ΒΔ αλλά η διαγραφή από αυτή. Στην περίπτωσή μας διαγράφουμε τα ευαίσθητα δεδομένα όπως το ονοματεπώνυμο αλλά κρατάμε τη διεύθυνση email του χρήστη όχι στην αναγνώσιμη μορφή του αλλά αφού το μετασχηματίσουμε με μια μονόδρομη συνάρτηση όπως η md5 ώστε να μπορούμε να έχουμε ανώνυμα στατιστικά στοιχεία. Φυσικά ενημερώνουμε την εγγραφή για την ημερομηνία διαγραφής του χρήστη.

unregistration_flow_diagram

Σχήμα 5. Διάγραμμα οντοτήτων συσχετίσεων αποχώρησης

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

Στο τελευταίο μέρος του άρθρου μας θα δούμε μια απλή υλοποίηση με πλήρη κώδικα του σχεδιασμού που μόλις ολοκληρώσαμε!

Share This: