Να δώσω και ένα πολύ απλό παράδειγμα αυτού που περιγράφω παραπάνω:
(Μιλάω πάντα για την κλασική προσέγγιση που ανέφερα παραπάνω - υπάρχουν κι άλλες):
Εχω, για παράδειγμα, μια εφαρμογη σε Windows Forms η οποία μιλάει με μια Access Database και ο μοναδικός της σκοπός είναι να μου εμφανίζει την εγγραφή του πελάτη με κωδικό 1001.
Τι θα έκανα για να φτιάξω τα 3 layers που λεμε:
- Presentation: Μια windows form η οποία "μιλάει" στο αμέσως από κάτω layer και του λεει: "Φερε μου ένα customer object που να έχει κωδικό 1001". Οταν το παρει, ξέρει πως να το δείξει.
- Business Logic: Εδώ υλοποιείται το customer object. Για να το γεμίσει, αυτή η κλάση μιλάει με το DAL (data access layer) και του λέει: "Φερε μου από τη database τα πεδία του customer με τον κωδικο που θα σου δώσω", παίρνοντας πίσω "κατι" (ενα dataset, ενα datatable, ένα array, ένα delimited string, ένα xml, κατι τελος παντων από το οποίο θα μπορέσει να αντλήσει τις πληροφορίες και να γεμίσει τον εαυτό του - τα properties του). Το παρόν layer ΔΕΝ ξερει απο databases και ΟΥΤΕ ξέρει ποιός το έχει καλέσει. Η μόνη του δουλειά είναι να μιλάει στο "απο κάτω" layer.
- Data access: Εδώ υλοποιείται η επικονωνία με τη database. Για το παράδειγμά μας, κάπου υλοποιείται μια μέθοδος η οποία τρέχει στην Access ένα query του στυλ "SELECT a,b,c,d,e,f FROM Customer WHERE id=?" οπου στη θέση του ? μπαίνει το ID που θέλουμε και επιστρέφει προς τα πίσω κάτι (dataset, datatable, array....). ΄Το layer αυτό έχει αποκλειστική του ευθύνη την επικοινωνία με τη database και τίποτα άλλο.
Σε τι μας βολεύει αυτό;
- Αν αύριο αντί για Access αποφασίσουμε να χρησιμοποιήσουμε SQL Server, ξαναυλοποιούμε μόνο το DAL.
- Αν αύριο αντί για Forms αποφασίσουμε να χρησιμοποιήσουμε Web, ξαναυλοποιούμε μόνο το presentation.
- Αν αύριο θελήσουμε να προσθέσουμε π.χ. ένα υπολογιζόμενο πεδίο στο object του πελάτη, (π.χ. καθαρές αμοιβές, που δεν υπάρχουν - υποθέτουμε - στη database αλλά μπορούν να υπολογιστούν) - αλλάζουμε το business logic layer, και βλεπουμε αν χρειαστεί να κάνουμε αλλαγές στα υπόλοιπα.
Το ξαναλέω για να είμαι ασφαλής: Αυτά τα παραδείγματα είναι ΠΟΛΥ απλουστευμένα.
Σωτήρης Φιλιππίδης
DotSee Web Services