Βέλτιστες πρακτικές: Δημιουργία γωνιακών υπηρεσιών χρησιμοποιώντας πρότυπο σχεδίασης πρόσοψης για σύνθετα συστήματα

Γωνιακές υπηρεσίες

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

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

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

Στη δεύτερη προσέγγιση (που ακολουθείται ευρέως), χτίζεται η συγκεκριμένη μικρο-υπηρεσία. Για παράδειγμα, εάν το σύστημά σας έχει στοιχεία σύνδεσης, SignUp, ταμπλό, θα δημιουργήσετε LoginService, SignUpService, DashboardService και ούτω καθεξής. Κάθε υπηρεσία πρέπει να περιλαμβάνει τη λειτουργικότητα που απαιτείται για συγκεκριμένη στοχοθετημένη συνιστώσα. Τώρα αυτό το σχέδιο φαίνεται καλό, έτσι δεν είναι;

Πρόβλημα?

Ενώ δημιουργείτε μεγάλη και περίπλοκη εφαρμογή Single Page χρησιμοποιώντας το γωνιακό, σύντομα θα καταλήξετε σε εκατοντάδες και χιλιάδες κλάσεις συνιστωσών. Με αυτά τα λόγια, θα έχετε ένα παρόμοιο αριθμό γωνιακών υπηρεσιών που θα έχουν εγχυθεί. Ποιο είναι το πρόβλημα εδώ;

Ανεξάρτητα από το πόσο καλή σύμβαση ονομασίας ακολουθήσατε για την κατασκευή στοιχείων και υπηρεσιών, θα χρειαστεί χρόνος για να καταλάβετε το συγκεκριμένο όνομα της υπηρεσίας για συγκεκριμένη κατηγορία. Επίσης, μπορεί να καταλήξετε να γράφετε διπλότυπη υπηρεσία με ελαφρώς διαφορετικό όνομα για το ίδιο στοιχείο από ό, τι άλλα κατασκευασμένα από την ομάδα. Εάν εργάζεστε σε μοντέλο Extreme Programming, οι προγραμματιστές των frontend σας υποτίθεται ότι συνεχίζουν να αλλάζουν μεταξύ των ενοτήτων / στοιχείων / λειτουργιών. Δεν θα έπρεπε να χρειαστεί πολύς χρόνος για να καταλάβουν τα στοιχεία και τις υπηρεσίες που συνδέονται.

Λύση

Μπορούμε να λύσουμε αυτό το πρόβλημα χρησιμοποιώντας πρότυπο σχεδίασης πρόσοψης.

Πρότυπο σχεδίασης πρόσοψης

Η πρόσοψη εξετάζει την ενσωμάτωση ενός πολύπλοκου υποσυστήματος μέσα σε ένα μοναδικό αντικείμενο διεπαφής. Αυτό μειώνει την καμπύλη μάθησης που απαιτείται για την επιτυχή μόχλευση του υποσυστήματος. Προωθεί επίσης την αποσύνδεση του υποσυστήματος από τους δυνητικούς πολλούς πελάτες του.

Το αντικείμενο Πρόσοψης πρέπει να είναι ένας αρκετά απλός συνήγορος ή διευκολυντής. Δεν πρέπει να γίνει ένα γνωστό αντικείμενο μαντείας ή "θεού".

Εδώ είναι η καλή ανάγνωση για πρότυπο σχεδίασης πρόσοψης λεπτομερώς

Πρότυπο σχεδίασης πρόσοψης

Πρόσοψη σε δράση με γωνιακές υπηρεσίες

Θα συνιστούσα να ακολουθήσετε τα παρακάτω βήματα για να δημιουργήσετε γωνιακές υπηρεσίες χρησιμοποιώντας πρότυπο πρόσοψης:

Ορίστε όλες τις γωνιακές σας υπηρεσίες σύμφωνα με τις επιχειρηματικές απαιτήσεις σας και / ή συνεχίστε να προσθέτετε περισσότερα ανάλογα με τις ανάγκες σας.

Δημιουργήστε μια υπηρεσία που ονομάζεται "FacadeService" (διστάσετε να χρησιμοποιήσετε οποιοδήποτε άλλο όνομα εδώ)

Δημιουργήστε ένα κοινόχρηστο NgModule και δώστε όλες τις γωνιακές υπηρεσίες

Εφαρμογή Υπηρεσίας Πρόσοψης

Η κύρια συζήτησή μας θα είναι γύρω από την υπηρεσία "FacadeService" μόνο.

Έχουμε συζητήσει για δύο προσεγγίσεις γιγαντιαία εξυπηρέτηση έναντι μικροεπιχειρήσεων. Έχουμε δει τα πλεονεκτήματα και τα μειονεκτήματά τους. Η καλύτερη λύση είναι να συγχωνευθούν και οι δύο για να δημιουργήσουν την υπηρεσία Facade. Τώρα, η τάξη FacadeService θα είναι μια τάξη Θεού, αλλά δεν θα έχει πραγματική λειτουργικότητα αλλά ένα περιτύλιγμα πάνω από τις πραγματικές υπηρεσίες.

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

Ένας ευφυέστερος τρόπος θα ήταν να συγκεντρωθούν όλες οι γωνιακές υπηρεσίες μέσα στο FacadeService και να επιλυθούν τα περιστατικά τους από το γωνιακό DI μέσα στην πρόσβαση "ιδιοκτησίας".

Ας συζητήσουμε τη χρήση της υπηρεσίας AccountService.

Έχουμε μια ιδιότητα που ονομάζεται accountService στο FacadeService. Οι εντολές getOrderList () και getAddress () του FacadeService λειτουργούν ως περιτυλίγματα για τις τρέχουσες μεθόδους του accountService.

Οποτεδήποτε έχει πρόσβαση το μέλος accountService, θα εκτελεστεί η δέσμη ιδιοτήτων του get. Μέσα στο μπλοκ, ελέγξουμε εάν το πεδίο υποστήριξης _accountService είναι ένα παράδειγμα. Αν όχι, ζητάμε από τον Injector γωνιακής εξάρτησης να επιλύσει ένα παράδειγμα για εμάς.

Για να αποκτήσετε πρόσβαση στη μηχανή γωνιακού DI, πρέπει να εγχύσουμε την ενσωματωμένη υπηρεσία Inejctor Angular στο εσωτερικό του κατασκευαστή του FacadeService. ο injector.get () θα διερευνά τον κινητήρα DI του Angular για την επίλυση της παρουσίας της υπηρεσίας που ζητήθηκε, εάν παρασχεθεί. (Να θυμάστε το SharedModule, όπου έχουμε παράσχει όλες τις υπηρεσίες;)

Αν έχετε παρατηρήσει προσεκτικά, έχουμε εφαρμόσει μοτίβο σχεδιασμού Singleton, καθώς και μέσα στο τμήμα ιδιοκτησίας της ιδιότητας accountService.

Κατανάλωση FacadeService στο εσωτερικό των στοιχείων

Έχουμε το AccountService συγκεντρωμένο μέσα στο FacadeService και είναι έτοιμο για κατανάλωση μέσα στο OrderComponent και AddressComponent.

Τελειώνοντας το υπόλοιπο σύστημα

Στην παρόμοια σημείωση της εφαρμογής "Λογαριασμός εξυπηρέτησης", μπορείτε να ολοκληρώσετε την υλοποίηση άλλων υπηρεσιών γωνίας στο FacadeService.

Υλοποίηση σχεδίου σχεδίασης πρόσοψης σε γωνιακές υπηρεσίες

Ζωντανή επίδειξη:

Αποθήκη GitHub:

Περίληψη

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

Στην υγειά σας!