Μια γρήγορη εισαγωγή στην καθαρή αρχιτεκτονική

Σε ένα έργο ανοιχτού κώδικα που άρχισα να συνεισφέρω, μου έφερε την ιδέα της «καθαρής αρχιτεκτονικής»

Πρώτον, ήταν αρκετά συντριπτικό, αλλά μετά από κάποια ανάγνωση είχε νόημα. Σκέφτηκα ότι θα ήταν χρήσιμο για τους άλλους αν έγραψα τις σκέψεις μου.

Πίνακας περιεχομένων

  • Οπτικές αναπαραστάσεις
  • Η ιδέα - παρουσιάζεται σε κουκκίδες
  • Παράδειγμα κώδικα
  • Πόροι

Οπτικές αναπαραστάσεις

Νομίζω ότι είναι πάντα καλό να ξεκινήσετε με κάποια οπτικοποίηση.

Εδώ είναι οι πιο κοινές εικόνες αυτής της έννοιας.

Η ιδέα - παρουσιάζεται σε κουκκίδες

Επέκταση από Πηγή και πίστωση: Mattia Battiston, υπό CC BY 4.0

Η τιμή που μπορεί να παρέχει

  • Μια αποτελεσματική στρατηγική δοκιμών που ακολουθεί την πυραμίδα δοκιμών
  • Τα πλαίσια είναι απομονωμένα σε μεμονωμένες ενότητες. Όταν (όχι εάν) αλλάξουμε γνώμη, πρέπει μόνο να κάνουμε μια αλλαγή σε ένα μέρος. Η εφαρμογή έχει περιπτώσεις χρήσης αντί να συνδέεται με ένα σύστημα CRUD
  • Η ουρλιάζοντας αρχιτεκτονική γνωρίζει επίσης την ουσιώδη χρήση της. Όταν κοιτάζετε τη δομή του πακέτου, έχετε μια αίσθηση για το τι κάνει η εφαρμογή αντί να βλέπετε τεχνικές λεπτομέρειες
  • Όλη η επιχειρηματική λογική είναι σε περίπτωση χρήσης, επομένως είναι εύκολο να βρεθεί και να μην αναπαραχθεί οπουδήποτε αλλού
  • Δύσκολο να κάνεις το λάθος πράγμα επειδή οι ενότητες επιβάλλουν εξαρτήσεις συλλογής. Εάν προσπαθήσετε να χρησιμοποιήσετε κάτι που δεν προορίζεστε, η εφαρμογή δεν μεταγλωττίζεται
  • Είναι πάντα έτοιμο για ανάπτυξη αφήνοντας την καλωδίωση του αντικειμένου για τελευταία. Ή χρησιμοποιώντας σημαίες χαρακτηριστικών, έτσι ώστε να έχουμε όλα τα οφέλη της συνεχούς ενοποίησης
  • Πολλαπλές εργασίες σε ιστορίες, έτσι ώστε διαφορετικά ζευγάρια να μπορούν να δουλεύουν εύκολα στην ίδια ιστορία ταυτόχρονα για να την ολοκληρώσουν πιο γρήγορα
  • Καλός μονόλιθος με σαφείς περιπτώσεις χρήσης που μπορείτε να χωρίσετε σε μικροϋπηρεσίες αργότερα, αφού μάθετε περισσότερα για αυτές

Οντότητες

  • Αντιπροσωπεύστε το αντικείμενο τομέα σας
  • Εφαρμόστε μόνο λογική που ισχύει γενικά σε ολόκληρη την οντότητα (π.χ. επικύρωση της μορφής ενός ονόματος κεντρικού υπολογιστή)
  • Απλά αντικείμενα: χωρίς πλαίσια, χωρίς σχολιασμούς

Χρησιμοποιήστε Θήκες

  • Αντιπροσωπεύστε τις επιχειρηματικές σας ενέργειες: μπορείτε να κάνετε με την εφαρμογή. Αναμένετε μία περίπτωση χρήσης για κάθε επιχειρηματική ενέργεια
  • Καθαρή επιχειρηματική λογική, απλός κώδικας (εκτός ίσως από ορισμένες βιβλιοθήκες utils)
  • Η υπόθεση χρήσης δεν γνωρίζει ποιος την ενεργοποίησε και πώς θα παρουσιαστούν τα αποτελέσματα (για παράδειγμα, θα μπορούσε να είναι σε μια ιστοσελίδα, ή - να επιστραφεί ως JSON, ή απλά να καταγραφεί και ούτω καθεξής.)
  • Ρίχνει επιχειρηματικές εξαιρέσεις

Διεπαφές / προσαρμογείς

  • Ανάκτηση και αποθήκευση δεδομένων από και προς ορισμένες πηγές (βάση δεδομένων, συσκευές δικτύου, σύστημα αρχείων, τρίτα μέρη και ούτω καθεξής.)
  • Ορίστε διεπαφές για τα δεδομένα που χρειάζονται για να εφαρμόσουν κάποια λογική. Ένας ή περισσότεροι πάροχοι δεδομένων θα εφαρμόσουν τη διεπαφή, αλλά η περίπτωση χρήσης δεν γνωρίζει από πού προέρχονται τα δεδομένα
  • Εφαρμόστε τις διεπαφές που ορίζονται από την περίπτωση χρήσης
  • Υπάρχουν τρόποι αλληλεπίδρασης με την εφαρμογή και συνήθως περιλαμβάνουν έναν μηχανισμό παράδοσης (για παράδειγμα, REST API, προγραμματισμένες εργασίες, GUI, άλλα συστήματα)
  • Ενεργοποιήστε μια περίπτωση χρήσης και μετατρέψτε το αποτέλεσμα στην κατάλληλη μορφή για τον μηχανισμό παράδοσης
  • ο ελεγκτής για MVC

Εξωτερικές διεπαφές

  • Χρησιμοποιήστε ό, τι είναι το πιο κατάλληλο πλαίσιο (πρόκειται να απομονωθούν εδώ ούτως ή άλλως)

Παράδειγμα κώδικα

Δείτε τη δομή στο GitHub.

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

Ο φάκελος webminer είναι δομημένος στα βασικά επίπεδα:

  1. οντότητες
  2. use_cases
  3. interfaces_adapters
  4. εξωτερικές διεπαφές

Θα αντικατοπτρίζει την πολύ βασική προσέγγιση για το σχέδιο σχεδιασμού.

  • Ξεκινώντας από entities, μπορείτε να δείτε ότι το βασικό μοντέλο αυτού του έργου είναι τοarxiv_document
  • Στον επόμενο φάκελο, use_casesεμφανίζεται η περίπτωση χρήσης μας, δηλαδή να ζητήσετε τη σελίδα arxiv
  • Μετά από αυτό, περνάμε από το interface_adaptersφάκελο που παρέχει προσαρμογείς για αιτήματα διεργασίας σε μια εφαρμογή REST ή για σειριοποίηση
  • Το τελευταίο και τελευταίο στρώμα είναι external_interfaces. Εδώ χρησιμοποιούμε τον διακομιστή φιάλης για να εφαρμόσουμε τη λειτουργικότητα REST

Όλα αυτά τα στρώματα εξαρτώνται από τα βασικά στρώματα αλλά όχι το αντίστροφο.

Μια σημαντική σημείωση: Δεν εφαρμόζεται 100% σωστά στο αποθετήριο.

Γιατί; Επειδή οι περιπτώσεις χρήσης είναι πραγματικά διαφορετικές. Στην πραγματικότητα, η κύρια περίπτωση χρήσης είναι η παροχή των δομημένων δεδομένων. Μια άλλη περίπτωση χρήσης είναι να λάβετε τα δεδομένα από τη σελίδα arxiv.

Εντοπίσατε αυτό το σφάλμα στην αρχιτεκτονική; Εάν ναι, συγχαρητήρια! Όχι μόνο φέρατε αρκετή περιέργεια σε αυτό το άρθρο, αλλά μάλλον καταλαβαίνετε τις αρχές αρκετά καλά για να φτιάξετε τη δική σας υπόθεση και να εφαρμόσετε τις έννοιες στην πραγματικότητα!

Συμφωνείς? Εάν όχι, γιατί; Ευχαριστώ που διαβάσατε το άρθρο μου! Μη διστάσετε να αφήσετε σχόλια!

Πόροι

Εδώ είναι μερικά άρθρα που βρήκα χρήσιμα για την κατανόηση της έννοιας της «καθαρής αρχιτεκτονικής»:

  • //8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
  • //www.codingblocks.net/podcast/clean-architecture-make-your-architecture-scream/
  • //github.com/mattia-battiston/clean-architecture-example
  • //medium.com/@tiagoflores_23976/how-choose-the- مناسب-ios-architecture-mvc-mvp-mvvm-viper-or-clean-architecture-2d1e9b87d48
  • //de.slideshare.net/HimanshuDudhat1/mvp-clean-architecture
  • //softwareengineering.stackexchange.com/questions/336677/what-is-the-difference-between-mvp-and-clean-architecture
  • //engineering.21buttons.com/clean-architecture-in-django-d326a4ab86a9
  • //gist.github.com/ygrenzinger/14812a56b9221c9feca0b3621518635b
  • //medium.freecodecamp.org/how-to-write-robust-apps-consistently-with-the-clean-architecture-9bdca93e17b
  • //marconijr.com/posts/clean-architecture-practice/

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

Συνδεθείτε:

  • LinkedIn
  • Github
  • Μεσαίο
  • Κελάδημα
  • Steemit
  • Hashnode