Ποια είναι η διαφορά μεταξύ της ενσωμάτωσης
και της επέκτασης
σε ένα διάγραμμα περιπτώσεων χρήσης;
Η Επέκταση χρησιμοποιείται όταν μια περίπτωση χρήσης προσθέτει βήματα σε μια άλλη περίπτωση χρήσης πρώτης κατηγορίας.
Για παράδειγμα, φανταστείτε ότι η "Ανάληψη μετρητών" είναι μια περίπτωση χρήσης ενός Αυτόματου Ταμειολογιστικού Μηχανισμού (ΑΤΜ). Η "Εκτίμηση τέλους" θα επέκτεινε την Ανάληψη μετρητών και θα περιέγραφε το υποχρεωτικό "σημείο επέκτασης" που ενεργοποιείται όταν ο χρήστης του ΑΤΜ δεν κάνει τράπεζα στο ίδρυμα του ΑΤΜ. Σημειώστε ότι η βασική περίπτωση χρήσης "Ανάληψη μετρητών" στέκεται μόνη της, χωρίς την επέκταση.
Το Include χρησιμοποιείται για την εξαγωγή τμημάτων περιπτώσεων χρήσης που διπλώνονται σε πολλαπλές περιπτώσεις χρήσης. Η συμπεριλαμβανόμενη περίπτωση χρήσης δεν μπορεί να σταθεί μόνη της και η αρχική περίπτωση χρήσης δεν είναι πλήρης χωρίς την συμπεριλαμβανόμενη. Αυτό θα πρέπει να χρησιμοποιείται με φειδώ και μόνο σε περιπτώσεις όπου η επανάληψη είναι σημαντική και υπάρχει από σχεδιασμό (και όχι από σύμπτωση).
Για παράδειγμα, η ροή γεγονότων που συμβαίνει στην αρχή κάθε περίπτωσης χρήσης ΑΤΜ (όταν ο χρήστης βάζει την κάρτα του ΑΤΜ, εισάγει τον κωδικό PIN του και του εμφανίζεται το κύριο μενού) θα ήταν ένας καλός υποψήφιος για include.
Αυτό μπορεί να είναι αμφισβητήσιμο, αλλά το "περιλαμβάνει πάντα και επεκτείνει μερικές φορές" είναι μια πολύ κοινή παρανόηση που έχει σχεδόν επικρατήσει πλέον ως η de facto έννοια. Εδώ είναι μια σωστή προσέγγιση (κατά την άποψή μου, και ελεγχόμενη με τους Jacobson, Fowler, Larmen και 10 άλλες αναφορές).
Το κλειδί για να συμπεριλάβετε και να επεκτείνετε τις σχέσεις των περιπτώσεων χρήσης είναι να συνειδητοποιήσετε ότι, όπως και στην υπόλοιπη UML, το διακεκομμένο βέλος μεταξύ των περιπτώσεων χρήσης είναι μια σχέση εξάρτησης. Θα χρησιμοποιήσω τους όρους "base", "included" και "extending" για να αναφερθώ στους ρόλους των περιπτώσεων χρήσης.
Μια βασική περίπτωση χρήσης εξαρτάται από την/τις περιεχόμενη/ες περίπτωση/ες χρήσης- χωρίς αυτή/ες η βασική περίπτωση χρήσης είναι ελλιπής, καθώς η/οι περιεχόμενη/ες περίπτωση/ες χρήσης αντιπροσωπεύει/ουν επιμέρους ακολουθίες της αλληλεπίδρασης που μπορεί να συμβαίνουν πάντα Ή μερικές φορές. (Αυτό έρχεται σε αντίθεση με μια δημοφιλή παρανόηση σχετικά με αυτό, αυτό που προτείνει η περίπτωση χρήσης σας συμβαίνει πάντα στο κύριο σενάριο και μερικές φορές συμβαίνει σε εναλλακτικές ροές εξαρτάται απλώς από το τι επιλέγετε ως κύριο σενάριο- οι περιπτώσεις χρήσης μπορούν εύκολα να αναδιαρθρωθούν ώστε να αναπαριστούν μια διαφορετική ροή ως κύριο σενάριο και αυτό δεν θα πρέπει να έχει σημασία).
Στη βέλτιστη πρακτική της εξάρτησης με έναν τρόπο, η βασική περίπτωση χρήσης γνωρίζει για την περιεχόμενη περίπτωση χρήσης (και αναφέρεται σε αυτήν), αλλά η περιεχόμενη περίπτωση χρήσης δεν θα πρέπει να "γνωρίζει" για τη βασική περίπτωση χρήσης. Αυτός είναι ο λόγος για τον οποίο οι συμπεριλαμβανόμενες περιπτώσεις χρήσης μπορούν να είναι: α) περιπτώσεις χρήσης βάσης από μόνες τους και β) κοινές από έναν αριθμό περιπτώσεων χρήσης βάσης.
Η περίπτωση χρήσης που επεκτείνει εξαρτάται από την περίπτωση χρήσης της βάσης- επεκτείνει κυριολεκτικά τη συμπεριφορά που περιγράφεται από την περίπτωση χρήσης της βάσης. Η περίπτωση χρήσης βάσης θα πρέπει να είναι μια πλήρως λειτουργική περίπτωση χρήσης από μόνη της ("include" συμπεριλαμβάνεται φυσικά) χωρίς την πρόσθετη λειτουργικότητα της επεκτεινόμενης περίπτωσης χρήσης.
Οι περιπτώσεις χρήσης επέκτασης μπορούν να χρησιμοποιηθούν σε διάφορες περιπτώσεις:
Μια σημαντική πτυχή που πρέπει να ληφθεί υπόψη είναι ότι η επεκτεινόμενη περίπτωση χρήσης μπορεί να "εισάγει" συμπεριφορά σε διάφορα σημεία της ροής της βασικής περίπτωσης χρήσης, όχι μόνο σε ένα μόνο σημείο, όπως κάνει μια συμπεριλαμβανόμενη περίπτωση χρήσης. Για το λόγο αυτό, είναι εξαιρετικά απίθανο μια επεκτείνουσα περίπτωση χρήσης να είναι κατάλληλη για να επεκτείνει περισσότερες από μία βασικές περιπτώσεις χρήσης.
Όσον αφορά την εξάρτηση, η επεκτεινόμενη περίπτωση χρήσης εξαρτάται από την περίπτωση χρήσης της βάσης και είναι και πάλι μια μονόδρομη εξάρτηση, δηλαδή η περίπτωση χρήσης της βάσης δεν χρειάζεται καμία αναφορά στην επεκτεινόμενη περίπτωση χρήσης στην ακολουθία. Αυτό δεν σημαίνει ότι δεν μπορείτε να επιδείξετε τα σημεία επέκτασης ή να προσθέσετε μια αναφορά x στην επεκτεινόμενη περίπτωση χρήσης σε άλλο σημείο του προτύπου, αλλά η βασική περίπτωση χρήσης πρέπει να είναι σε θέση να λειτουργεί χωρίς την επεκτεινόμενη περίπτωση χρήσης.
Ελπίζω να έδειξα ότι η κοινή παρανόηση "τα includes είναι πάντα, τα extends είναι μερικές φορές" είναι είτε λανθασμένη είτε στην καλύτερη περίπτωση απλοϊκή. Αυτή η εκδοχή έχει στην πραγματικότητα περισσότερο νόημα αν λάβετε υπόψη σας όλα τα ζητήματα σχετικά με την κατευθυντικότητα των βελών που παρουσιάζει η παρανόηση - στο σωστό μοντέλο είναι απλά εξάρτηση και δεν αλλάζει δυνητικά αν αναδιαμορφώσετε το περιεχόμενο της περίπτωσης χρήσης.
όποτε υπάρχουν προϋποθέσεις για μια περίπτωση χρήσης τότε, επιλέξτε το include.
για περιπτώσεις χρήσης που έχουν αυθεντικοποίηση, το χειρότερο σενάριο, ή είναι προαιρετικές τότε επιλέξτε extend..
παράδειγμα: για μια περίπτωση χρήσης που αφορά την αναζήτηση εισόδου, ραντεβού, κράτηση εισιτηρίου ΠΡΕΠΕΙ ΝΑ ΣΥΜΠΛΗΡΩΣΕΤΕ ΜΙΑ φόρμα (φόρμα εγγραφής ή ανατροφοδότησης)....αυτή είναι η περίπτωση του include..
παράδειγμα:για μια περίπτωση χρήσης που επαληθεύει την είσοδο ή την εγγραφή στο λογαριασμό σας,η πιστοποίηση ταυτότητας είναι απαραίτητη.επίσης σκεφτείτε τα χειρότερα σενάρια.όπως η επιστροφή βιβλίου με πρόστιμο..η ΜΗ λήψη κράτησης..η πληρωμή του λογαριασμού ΜΕΤΑ την ημερομηνία λήξης..εδώ είναι που έρχεται το extend...
μην κάνετε υπερβολική χρήση των include και extend στα διαγράμματα.
ΚΡΑΤΉΣΤΕ ΤΟ ΑΠΛΌ ΑΝΌΗΤΟ!!!