Σειρά εκτέλεσης
┌─ globalBehaviors.before ─┐ ┌── call site ──┐ ┌─ globalBehaviors.after ─┐│ LoggingBehavior │ → │ CacheBehavior │ → │ TraceBehavior │ → η συνάρτηση└──────────────────────────┘ └───────────────┘ └─────────────────────────┘ ← το αποτέλεσμα επιστρέφει πίσω μέσω της αλυσίδας ←Κάθε behavior λαμβάνει το context και το next, δηλαδή το υπόλοιπο της αλυσίδας. Εκτελεί κώδικα πριν καλέσει το next(), μετά από αυτό, ή απαντά άμεσα χωρίς να το καλέσει (όπως συμβαίνει σε ένα cache hit).
| Θέση | Δηλώνεται στο | Εκτελείται |
|---|---|---|
| Global before | createPipeline({ globalBehaviors: { before } }) |
πρώτο, εξωτερικά |
| Call site | pipeline.wrap(options, ...entries) |
με τη σειρά των δηλωμένων entries |
| Global after | createPipeline({ globalBehaviors: { after } }) |
τελευταίο, πιο κοντά στη συνάρτηση |
Το globalBehaviors είναι ένα αντικείμενο ή ένας πίνακας αντικειμένων, καθένα με ένα scope: 'commands', 'queries', 'events' ή 'all' (η προεπιλογή). Τα entries κάθε αντικειμένου που ταιριάζει εφαρμόζονται με τη σειρά που παρατίθενται:
createPipeline({ globalBehaviors: [ { scope: 'all', before: [LoggingBehavior] }, { scope: 'commands', before: [AuditBehavior] }, { scope: 'queries', after: [CacheBehavior] }, ],});Συμπεριφορά που δηλώνεται δύο φορές
Ενότητα με τίτλο «Συμπεριφορά που δηλώνεται δύο φορές»Μια κλάση behavior εκτελείται το πολύ μία φορά ανά λειτουργία.
- Όταν δηλώνεται καθολικά και στο call site, εκτελείται στην καθολική (global) της θέση, με τις ρυθμίσεις του call site να υπερισχύουν (shallow merge) των καθολικών ρυθμίσεων.
- Όταν δηλώνεται σε δύο καθολικά entries, το πρώτο καθορίζει τη θέση της· ένα μεταγενέστερο tuple μπορεί να προσθέσει επιπλέον ρυθμίσεις.
Αυτό διασφαλίζει ότι ένας φρουρός (guard) παραμένει εκεί όπου τοποθετήθηκε αρχικά. Ένα behavior εξουσιοδότησης τοποθετημένο στο globalBehaviors.before παραμένει έξω από το cache ή το idempotency, ακόμη και αν ένα call site το επαναδηλώνει για να περάσει κανόνες, αποτρέποντας την παράκαμψη του ελέγχου από αποθηκευμένα αποτελέσματα.
Κανόνες διάταξης (Ordering rules)
Ενότητα με τίτλο «Κανόνες διάταξης (Ordering rules)»Ένα behavior μπορεί να δηλώσει ότι πρέπει να εκτελείται πριν ή μετά από κάποιο άλλο όταν συνυπάρχουν· για παράδειγμα, το idempotency πρέπει να εκτελείται μετά την εξουσιοδότηση. Μια αλυσίδα που παραβιάζει έναν τέτοιο κανόνα αποτυγχάνει κατά τον έλεγχο διαμόρφωσης που περιγράφεται στο Πώς τυλίγεται μια λειτουργία. Οι κανόνες επαληθεύουν τη σειρά διάταξης· δεν αλλάζουν αυτόματα τη σειρά της αλυσίδας.
Εμφωλευμένες λειτουργίες (Nested operations)
Ενότητα με τίτλο «Εμφωλευμένες λειτουργίες (Nested operations)»Μια τυλιγμένη συνάρτηση που καλεί μια άλλη τυλιγμένη συνάρτηση ξεκινά ένα εμφωλευμένο pipeline. Το εμφωλευμένο pipeline λαμβάνει το tenant και το correlation id από το εξωτερικό, εκτός αν ένα source ορίζει διαφορετικά: δείτε Το context του pipeline.