Τι είναι η λογική αρχιτεκτονική Η ινγηθή αξρηηεθηνληθή είλαη ε πςεινύ επηπέδνπ αθαίξεζεο νξγάλσζε ηνπ ινγηζκηθνύ ζε θιάζεηο ή παθέηα (ή ρώξνπο νλνκάησλ), ππνζπζηήκαηα, θαη επίπεδα. Ολνκάδεηαη ινγηθή αξρηηεθηνληθή γηαηί δελ απνζαθελίδνληαη κε απηήλ ζέκαηα όπσο ε δηακέξηζε ηνπ ζπζηήκαηνο ζε δηεξγαζίεο ηνπ ιεηηνπξγηθνύ ζπζηήκαηνο ή ε αλάζεζε ησλ δηαθόξσλ ππνζπζηεκάησλ ζε ππνινγηζηέο ζε έλα δίθηπν (απηέο νη απνθάζεηο είλαη ζέκαηα ηεο θπζηθήο αξρηηεθηνληθήο ή ηεο αξρηηεθηνληθήο εγθαηάζηαζεο).
Τι είναι τα επίπεδα (layers) Έλα επίπεδν είλαη έλα πνιύ κεγάιν θνκκάηη ηνπ ζπζηήκαηνο πνπ απνηειείηαη από νκάδεο θιάζεσλ, παθέηα ή ππνζπζηήκαηα. Παξέρεη κία ζπλεθηηθή ιεηηνπξγία πνπ είλαη ζρεηηθή κε κία κεγάιε ζε εκβέιεηα άπνςε ηεο ιεηηνπξγίαο ηνπ ζπζηήκαηνο. Επίζεο ηα επίπεδα νξγαλώλνληαη κε ηέηνην ηξόπν ώζηε ηα πςειόηεξα επίπεδα (όπσο απηό ηεο δηαζύλδεζεο ρξήζηε UI Layer) λα θαινύλ ππεξεζίεο ησλ ρακειόηεξσλ επηπέδσλ, αιιά όρη ην αληίζεην.
Τυπικά επίπεδα Τππηθά επίπεδα είλαη ηα αθόινπζα: Διαζύνδεζηρ σπήζηη (User Interface) Λογικήρ ηηρ εθαπμογήρ και Ανηικειμένων ηος σώπος ανάπηςξηρ (Application Logic and Domain Objects): Αληηθείκελα ηνπ ζπζηήκαηνο πνπ αλαπαξηζηνύλ έλλνηεο ηνπ ρώξνπ αλάπηπμεο (π.ρ. κία θιάζε Sale γηα ηηο πσιήζεηο) θαη εθπιεξώλνπλ κία απαίηεζε ηεο εθαξκνγήο, όπσο ν ππνινγηζκόο ηνπ θόζηνπο κίαο πώιεζεο. Τεσνικέρ ςπηπεζίερ (Technical Services): αληηθείκελα γεληθνύ ζθνπνύ θαη ππνζπζηήκαηα πνπ παξέρνπλ ηερληθέο ππεξεζίεο ππνζηήξημεο, όπσο δηαζύλδεζε κε βάζεηο δεδνκέλσλ, θαηαγξαθή ιαζώλ θιπ. Τέηνηεο ππεξεζίεο είλαη ζπλήζσο αλεμάξηεηεο από ηελ εθαξκνγή θαη επνκέλσο επαλαρξεζηκνπνηήζηκεο ζε πνιιά ζπζηήκαηα.
Αυστηρές και χαλαρές αρχιτεκτονικές επιπέδων Σε κία αςζηηπή απσιηεκηονική επιπέδων (strict layered architecture), έλα επίπεδν θαιεί κόλν ππεξεζίεο ηνπ επηπέδνπ αθξηβώο θάησ από απηό Απηόο ν ζρεδηαζκόο είλαη ζπλεζηζκέλνο ζε ζηνίβεο πξσηνθόιισλ, αιιά όρη ζε πιεξνθνξηαθά ζπζηήκαηα, ηα νπνία αθνινπζνύλ ζπλήζσο κία σαλαπή απσιηεκηονική επιπέδων (relaxed layered architecture), ζηελ νπνία έλα πςειόηεξν επίπεδν θαιεί ιεηηνπξγίεο ζηα ρακειόηεξα επίπεδα. Γηα παξάδεηγκα ην επίπεδν δηαζύλδεζεο ρξήζηε κπνξεί λα θαιέζεη απεπζείαο ην ακέζσο ρακειόηεξν επίπεδν ηεο ινγηθήο ηεο εθαξκνγήο, θαη επίζεο λα θαιέζεη ην επίπεδν ηερληθώλ ππεξεζηώλ (π.ρ. γηα θαηαγξαθή ζπκβάλησλ ζην log file)
Παράδειγμα λογικής αρχιτεκτονικής
Τι είναι η αρχιτεκτονική λογισμικού; An architecture is the set of significant decisions about the organization of a software system, the selection of the structural elements and their interfaces by which the system is composed, together with their behavior as specified in the collaborations among those elements, the composition of these structural and behavioral elements into progressively larger subsystems, and the architectural style that guides this organization these elements and their interfaces, their collaborations, and their composition. Booch, G., Rumbaugh, J, and Jacobson, I. 1999. The Unified Modeling Language User Guide. Reading, MA.: Addison-Wesley
Διαγράμματα πακέτων της UML Τα δηαγξάκκαηα παθέησλ ηεο UML ρξεζηκνπνηνύληαη ζπρλά γηα ηε θαηαγξαθή ηεο ινγηθήο αξρηηεθηνληθήο ελόο ζπζηήκαηνο ηα επίπεδα, ππνζπζηήκαηα, παθέηα (π.ρ. ηεο Java) θιπ. Έλα επίπεδν κπνξεί λα απεηθνληζζεί σο έλα παθέην ηεο UML, π.ρ. ην επίπεδν δηαζύλδεζεο ρξήζηε κνληεινπνηείηαη σο έλα παθέην κε ην όλνκα UI. Έλα δηάγξακκα παθέησλ ηεο UML παξέρεη έλαλ ηξόπν γηα ηελ νκαδνπνίεζε ζηνηρείσλ. Μπνξεί λα νκαδνπνηήζεη νηηδήπνηε: θιάζεηο, άιια παθέηα, πεξηπηώζεηο ρξήζεο θιπ. Η ελζπιάθσζε παθέησλ ζε άιια παθέηα είλαη πνιύ ζπλεζηζκέλε. Έλα παθέην ηεο UML είλαη κία πνιύ πην γεληθή έλλνηα από έλα παθέην ηεο Java ή έλα ρώξν νλνκάησλ ηνπ.net, αλ θαη κπνξεί λα ρξεζηκνπνηεζεί γηα ηελ απεηθόληζε απηώλ θαη άιισλ ελλνηώλ.
Εξαρτήσεις πακέτων και πλήρως προσδιορισμένα ονόματα κλάσεων Είλαη πνιύ ζπλεζηζκέλν λα ζέινπκε λα δείμνπκε ηηο εμαξηήζεηο (ζπδεύμεηο) κεηαμύ παθέησλ έηζη ώζηε νη θαηαζθεπαζηέο λα κπνξνύλ λα δνπλ ηελ ζύδεπμε (coupling) ζην επίπεδν ηνπ ζπζηήκαηνο. Η γξακκή εμάξηεζεο ηεο UML ρξεζηκνπνηείηαη γη απηό: έλα δηαθεθνκκέλν βέινο ην νπνίν δείρλεη πξνο ην παθέηνπεγή ηεο εμάξηεζεο. Έλα παθέην ηεο UML αλαπαξηζηά έλαλ ρώξν νλνκάησλ έηζη ώζηε, γηα παξάδεηγκα, κία θιάζε Date λα κπνξεί λα νξηζηεί ζε δύν δηαθνξεηηθά παθέηα. Αλ ρξεηάδεηαη ην πιήξεο όλνκα κηαο θιάζεο ή ελόο παθέηνπ, κπνξείηε λα ρξεζηκνπνηήζεηε ην πιήξσο πξνζδηνξηζκέλν όλνκα: π.ρ. java::util::date (ε θιάζε Date ηνπ παθέηνπ util πνπ πεξηέρεηαη ζην παθέην java)
Συμβολισμοί της UML για εσωτερικά και εξωτερικά πακέτα Ελαιιαθηηθνί ζπκβνιηζκνί ηεο UML γηα εζσηεξηθά παθέηα
Σχεδίαση συστημάτων σε επίπεδα Οη βαζηθέο ηδέεο ηεο ρξήζεο ησλ επηπέδσλ είλαη απιέο: Οξγάλσζε ηεο κεγάιεο εκβέιεηαο ινγηθήο δνκήο ελόο ζπζηήκαηνο ζε δηαθξηηά επίπεδα, δηαθξηηώλ θαη ζπζρεηηδόκελσλ αξκνδηνηήησλ, κε κία μεθάζαξε, ζπκπαγή δηάθξηζε ησλ επζπλώλ, έηζη ώζηε ηα ρακειόηεξα επίπεδα λα έρνπλ ρακεινύ επηπέδνπ γεληθέο ππεξεζίεο, ελώ ηα πςειόηεξα λα είλαη πεξηζζόηεξν ζρεηηθά κε ηελ εθαξκνγή. Η ζπλεξγαζία θαη ε ζύδεπμε είλαη από ηα πςειόηεξα πξνο ηα ρακειόηεξα επίπεδα; Η ζύδεπμε ησλ ρακειόηεξσλ επηπέδσλ κε ηα πςειόηεξα απνθεύγεηαη. Buschmann, F., Meunier, R., Rohnert, H., Sommerlad, P., and Stal, M. 1996. Pattern- Oriented Software Architecture: A System of Patterns, Wiley.
Προβλήματα που επιλύονται με το πρότυπο των επιπέδων Τα πξνβιήκαηα πνπ επηιύνληαη κε ην πξόηππν ησλ επηπέδσλ είλαη ηα αθόινπζα: Οη αιιαγέο πεγαίνπ θώδηθα δηαρένληαη ζε όιν ην ζύζηεκα πνιιά κέξε ηνπ ζπζηήκαηνο είλαη έληνλα ζπλδεδεκέλα. Η ινγηθή ηεο εθαξκνγήο είλαη κπιεγκέλε κε ηελ δηαζύλδεζε ρξήζηε, έηζη ώζηε λα κελ είλαη επαλαρξεζηκνπνηήζηκε κε κία δηαθνξεηηθή δηαζύλδεζε, ή λα κπνξεί λα αλαηεζεί ζε έλαλ άιιν θόκβν επεμεξγαζίαο ελόο θαηαλεκεκέλνπ ζπζηήκαηνο. Πηζαλά γεληθέο ηερληθέο ππεξεζίεο ή επηρεηξεκαηηθή ινγηθή είλαη κπιεγκέλεο κε πεξηζζόηεξν εμεηδηθεπκέλε γηα ηελ εθαξκνγή ινγηθή, κε απνηέιεζκα λα κελ κπνξνύλ λα επαλαρξεζηκνπνηεζνύλ, λα αλαηεζνύλ ζε θάπνηνλ άιιν θόκβν, ή λα αληηθαηαζηαζνύλ από δηαθνξεηηθέο πινπνηήζεηο. Υπάξρεη έληνλε ζύδεπμε κεηαμύ δηαθνξεηηθώλ πεξηνρώλ ελδηαθέξνληνο. Είλαη επνκέλσο δύζθνιν λα δηαηξέζεη θαλείο απηά πνπ πξέπεη λα γίλνπλ ζε δηαθξηηέο πεξηνρέο θαη λα ηα αλαζέζεη ζε δηαθνξεηηθέο νκάδεο αλάπηπμεο.
Συνήθη επίπεδα ζε μία λογική αρχιηεκηονική πληροθοριακών ζυζηημάηων
Οφέλη από την χρήση επιπέδων (1) Γεληθά ππάξρεη κία δηάθξηζε ελδηαθεξόλησλ, κία δηάθξηζε κεηαμύ ησλ ππεξεζηώλ ρακειόηεξνπ θαη πςειόηεξνπ επηπέδνπ θαη ησλ γεληθώλ ππεξεζηώλ από ηηο εμεηδηθεπκέλεο γηα ηελ εθαξκνγή ππεξεζίεο. Απηήλ ε δηάθξηζε κεηώλεη ηελ ζύδεπμε θαη ηηο εμαξηήζεηο, βειηηώλεη ηελ ζπλνρή, απμάλεη ηηο πηζαλόηεηεο επαλαρξεζηκνπνίεζεο, θαη απμάλεη ηελ δηαύγεηα. Η πνιππινθόηεηα είλαη εκθσιεπκέλε θαη είλαη δπλαηόλ λα δηαζπαζηεί. Τα ρακειόηεξα επίπεδα πεξηέρνπλ επαλαρξεζηκνπνηήζηκεο ππεξεζίεο.
Οφέλη από την χρήση επιπέδων (2) Μεξηθά επίπεδα κπνξνύλ λα αληηθαηαζηαζνύλ κε λέεο πινπνηήζεηο. Απηό δελ είλαη γεληθά εθηθηό γηα ηερληθέο ππεξεζίεο ρακεινύ επηπέδνπ ή ζεκειηώδε επίπεδα (e.g. java.util), αιιά κπνξεί λα είλαη εθηθηό γηα ην επίπεδν δηαζύλδεζεο ρξήζηε, εθαξκνγήο θαη ρώξνπ εθαξκνγήο (domain layer). Μεξηθά επίπεδα (εηδηθόηεξα ην domain layer θαη ην επίπεδν ηερληθώλ ππεξεζηώλ) κπνξνύλ λα θαηαλεκεζνύλ ζε δηαθνξεηηθνύο θόκβνπο. Η αλάπηπμε από νκάδεο δηεπθνιύλεηαη δηόηη ππάξρεη κία ινγηθή δηακέξηζε.
Ορισμός του Μοντέλου του χώρου ανάπτυξης (Domain model) Ο όξνο «Μνληέιν ρώξνπ αλάπηπμεο» ( Domain Model ) ζεκαίλεη κία αλαπαξάζηαζε ελλνηνινγηθώλ θιάζεσλ ηνπ ρώξνπ αλάπηπμεο. Ο όξνο δελ ζεκαίλεη έλα ζύλνιν δηαγξακκάησλ πνπ πεξηγξάθνπλ θιάζεηο ηνπ ινγηζκηθνύ, ην επίπεδν ηνπ ρώξνπ αλάπηπμεο (domain layer) ηεο αξρηηεθηνληθήο, ή αληηθείκελα ηνπ ινγηζκηθνύ κε αξκνδηόηεηεο. Τν κνληέιν ρώξνπ αλάπηπμεο απεηθνλίδεη Ελλνηνινγηθέο θιάζεηο Σπζρεηίζεηο κεηαμύ ησλ ελλνηνινγηθώλ θιάζεσλ Ιδηόηεηεο ησλ ελλνηνινγηθώλ θιάζεσλ Δελ πεξηέρεη ιεηηνπξγίεο Λεηηνπξγεί επίζεο θαη σο έλα νπηηθό ιεμηθό ησλ πην ζεκαληηθώλ ελλνηώλ ζηνλ ρώξν αλάπηπμεο θαη ησλ πιεξνθνξηώλ ηνπο.
Παράδειγμα Domain Model
Σχέση μεταξύ Domain Layer και Domain Model
Στρώματα, Επίπεδα και Διαμερίσεις Σηπώμα (Tier): Έρεη επηθξαηήζεη λα ζεκαίλεη έλαλ θπζηθό θόκβν επεμεξγαζίαο (ή ζπζηνηρία θόκβσλ), όπσο ην ζηξώκα ηνπ πειάηε (client tier) πνπ είλαη ν ππνινγηζηήο ηνπ πειάηε. Επίπεδα (Layers): Είλαη ε θάζεηε δηάζπαζε ηνπ ζπζηήκαηνο. Διαμεπίζειρ (Partitions): Αλαπαξηζηνύλ ηελ νξηδόληηα δηάζπαζε ζε ζρεηηθά παξάιιεια ππνζπζηήκαηα ελόο επηπέδνπ. Γηα παξάδεηγκα ην επίπεδν ηερληθώλ ππεξεζηώλ κπνξεί λα δηαζπαζηεί ζε δηακεξίζεηο όπσο ε Αζθάιεηα θαη νη Αλαθνξέο.
Η αρχή της διάκρισης Μοντέλου- Απεικόνισης (Model-View separation) Η αξρή έρεη ηνπιάρηζηνλ δύν κέξε: Μελ ζπλδέεηαη αληηθείκελα πνπ δελ έρνπλ ζρέζε κε ηελ δηαζύλδεζε ρξήζηε κε αληηθείκελα ηεο δηαζύλδεζεο ρξήζηε (π.ρ. έλα αληηθείκελν Sale κε έλα JFrame ηνπ swing). Γηαηί; Δηόηη ηα παξάζπξα δελ είλαη επαλαρξεζηκνπνηήζηκα ελώ ηα αληηθείκελα κπνξεί λα είλαη θαη δηόηη ζέιεηε λα κπνξείηε λα αιιάμεηε ηελ δηαζύλδεζε. Μελ ηνπνζεηείηαη ινγηθή εθαξκνγήο (π.ρ. ππνινγηζκόο θόξσλ) ζηα αληηθείκελα δηαζύλδεζεο ρξήζηε. Μνληέιν = Επίπεδν ρώξνπ αλάπηπμεο (domain layer) Απεηθόληζε = Επίπεδν δηαζύλδεζεο ρξήζηε (user interface layer)
Οφέλη από την διάκριση μοντέλουαπεικόνισης Υπνζηεξίδεη ζπκπαγείο νξηζκνύο κνληέισλ πνπ επηθεληξώλνληαη ζηηο δηαδηθαζίεο ηνπ ρώξνπ αλάπηπμεο, αληί γηα ηηο δηαζπλδέζεηο ρξήζεο. Επηηξέπεη ηελ μερσξηζηή αλάπηπμε ηνπ κνληέινπ θαη ηεο δηαζύλδεζεο ρξήζηε. Ειαρηζηνπνηεί ηελ επίδξαζε ησλ αιιαγώλ ηεο δηαζύλδεζεο ζην επίπεδν ηνπ ρώξνπ αλάπηπμεο. Επηηξέπεη λέεο απεηθνλίζεηο λα ζπλδεζνύλ εύθνια ζε έλα ήδε ππάξρνλ επίπεδν ρώξνπ αλάπηπμεο, ρσξίο αιιαγέο ζε απηό. Επηηξέπεη πνιιαπιέο ηαπηόρξνλεο απεηθνλίζεηο ηνπ ίδηνπ αληηθεηκέλνπ ηνπ κνληέινπ (π.ρ. κνξθή πίλαθα θαη γξάθεκα πίηαο γηα πιεξνθνξίεο πσιήζεσλ). Επηηξέπεη ηελ εθηέιεζε ηνπ κνληέινπ αλεμάξηεηα από ηελ δηαζύλδεζε ρξήζηε (π.ρ. ζε έλα ζύζηεκα επεμεξγαζίαο κελπκάησλ) Επηηξέπεη ηελ ρξήζε δηαθνξεηηθώλ πιαηζίσλ δηαζύλδεζεο ρξήζηε (user interface frameworks) κε ην ίδην κνληέιν.
Διαγράμματα ακολουθίας συστήματος (SSD) Έλα δηάγξακκα αθνινπζίαο ζπζηήκαηνο (System Sequence Diagram SSD) είλαη έλαο γξήγνξνο θαη εύθνινο ηξόπνο γηα ηελ απεηθόληζε ησλ εηζόδσλ ζην ζύζηεκα θαη ησλ εμόδσλ από απηό. Φξεζηκνπνηείηαη γηα ηελ δηαηύπσζε ζπκβνιαίσλ ιεηηνπξγηώλ (contracts) θαζώο θαη ζαλ είζνδνο ζηελ ζρεδίαζε αληηθεηκέλσλ θαη ζηελ αξρηηεθηνληθή ζρεδίαζε.
SSD για ένα σενάριο επεξεργασίας πωλήσεων
Σχέση SSD και επιπέδων Σε κία θαινζρεδηαζκέλε αξρηηεθηνληθή, ην επίπεδν δηαζύλδεζεο ρξήζηε (UI layer) ζα πξνσζήζεη ηηο αηηήζεηο από ηελ δηαζύλδεζε ρξήζηε (system operations) ζην επίπεδν ηνπ ρώξνπ αλάπηπμεο γηα ρεηξηζκό. Τα κελύκαηα πνπ απνζηέιινληαη από ην επίπεδν δηαζύλδεζεο ρξήζηε ζην επίπεδν ηνπ ρώξνπ αλάπηπμεο, είλαη κελύκαηα πνπ θαίλνληαη ζην SSD (π.ρ. ην enteritem)
Σχέση SSD και επιπέδων (συνέχεια)
Ερωτήσεις;