53 - Logická architektura software (pojem logické architektury; vrstvena architektura; závislosti vrstev a balíčků; princip oddělení pohledu; vzor Model-View-Controller) Flashcards
Softwarová architektura
- je způsob uspořádání SW komponent tak aby, splňovalo různé požadavky (funkční a nefunkční).
- soubor významných rozhodnutí o organizaci SW systémů, výběr strukturních prvků a jejich rozhraní, pomocí nichž je systém sestaven, společně s jejich chováním specifikovaným spoluprácí těchto prvků, seskupení do skupiny větších podsystémů a architektonických stylů, který řídí tuto organizaci.
Logická architektura (logical architecture)
• je organizace tříd do balíčků (jmenných prostorů), podsystémů, vrstev. Neříká nic o jejich fyzickém umístění
• v UML modelujeme jako !!! diagram balíčků !!!
Architetura nasazení (deployment architecture)
• opak logické architektury - nasazení subsystémů do různých prostředí, na různé počítače
• v UML modelujeme jako !!! diagram nasazení !!!
Vrstvená architektura
Vrstva (SW)
• Vrstvy architektury napomáhajı́ lepšı́ pochopitelnosti systému, přehlednosti a udržovatelnosti. Dovolujı́ přı́mou komunikaci pouze v rámci vrstvy, vynucujı́ viditelné závislosti.
• seskupení tříd, balíčků, podsystémů, které souvisejí z hlediska zodpovědnosti za nějaký významný aspekt systému.
• vertikální dělení, seskupení z hlediska odpovědnosti, hierarchické
Vrstvená architektura
• organizovaná hierarchicky, vyšší vrstva využívá služeb nižší vrstvy
• komplexnost je zapouzdřena ve vrstvách
• lepší podmínky pro vývoj v týmu
• redukce provázanosti (coupling), zvýšení koheze (vnitřní soudržnost)
• napomáhá lepší pochopitelnosti systému, přehlednosti a udržovatelnosti
• dovoluje přijmout komunikaci pouze v rámci vrstvy, vynucují viditelné závislosti
Typická 3-vrstvá architektura
• uživatelské rozhraní
• aplikační logika a objekty domény
• technické služby (databáze, záznam chyb,…)
Sekce = horizontální dělení, dělení na relativně paralelní podsystémy
Striktní (uzavřená) vrstvená architektura = vyšší vrstva může používat jen bezprostředně nižší vrstvu
Uvolněná (otevřená) vrstvená architektura = vyšší vrstva používá několik nižších vrstev
Doménový objekt = třídy odpovídající reálné doméně, mají přiřazenu část zodpovědnosti aplikační logiky
Závislosti vrstev, balíčků a tříd
• Balíček = (dle UML) seskupení elementů modelu pod jedním jménem. Může obsahovat jiné balíčky a entity.
• Závislost
= Balíček A závisí na balíčku B jestliže změny v balíčku B mohou vynutit změny v balíčku A
• závislost metod -> závislost tříd -> závislost balíčků -> závislost vrstev
- Závislost metod = vzniká voláním v kódu.
- Závislost tříd = je hlubšího rázu, třída většinou závisí na třídě v jiném balíčku nebo vrstvě a tím zesložiťuje závislosti balíčků a vrstev.
○ SD there is a structural dependency - dědění, užívání,
○ FO there is a fan-out similarity - používají stejné interfaces○ EC there is an evolutionary coupling - mění se spolu (the classes are frequently changed together during development) ○ CC there are code clones - používají stejný / podobný kód ○ CO there is the same code ownership - stejný autor ○ SS there is a semantic similarity - sémantická podobnost
- Závislost vrstev - by měla být směrem od vyšší k nižší. Nižší vrstvy by měly být stabilní (neměnit se příliš v čase).
• Zdroje závislostí ○ Dědění ○ Asociace ○ Volaní operace ○ Parametr operace ○ ...
• Cyklická závislost -> A závisí na B, které závisí na A (i tranzitivně přes další třídy) • Odstranění cyklické závislosti ○ mezi balíčky - A a B se provádí přidáním speciálního balíčku A2, který obsahuje prvky A takové, že je na nich B závislé. Na novém balíčku A2 je pak závislé A i B. -> Odstranil se tak jeden směr závislosti, druhý zůstává nezměněn. ○ mezi třídami - pracuje na principu vytvoření nového rozhraní, na které se závislost předá (tzv. Presenter). Je také možné vytvořit rozhraní pro snížení počtu závislostí. ----------------- Úrovně - fyzicky separované běžící na vlastních strojích
Tiers – to separate software artefacts in their deployment:
• tiers are physically separated, running on separate machines - (to improve scalability & resiliency, however, with a communication overhead)
• tiers can be in particular relationships of their interaction - (e.g., client-server, peer-to-peer, etc.)
• communication is not restricted, a tier can call to any other tier - (directly, or using asynchronous messaging by a message queue/bus)
• each layer might be hosted in its own tier (one to one), or several layers might be hosted on the same tier (many to one).
Architektonické vzory - model-view separation a MVC
Princip oddělení pohledu a modelu (Model-View Separation)
- Vrstvy uživatelského rozhraní se často mění (různé pohledy na data, různé požadavky uživatelů, …)
Podstata:
• vztah vrstvy UI (pohledu) k ostatním vrstvám:
○ Nevytvářet vazbu objektů nižších vrstev na objekty uživatelského rozhraní
○ Nevkládat aplikační logiku do operací tříd UI
○ Objekty nižších vrstev by neměli přímo znát objekty UI a posílat jim zprávy.
• Řešení
○ pomocí asynchronních událostí:
○ Použití návrhového vzoru Observer.
Model-View-Controller (MVC) = architektonický vzor, rozděluje datový model aplikace, uživatelské rozhraní a řídicí logiku do tří nezávislých komponent tak, že modifikace některé z nich má minimální vliv na ostatní.
* Model - reprezentuje data, odpovídá vrstvě domény, obsahuje objekty domény, přidává k datům aplikační logiku * View - reprezentuje způsob zobrazení dat, zodpovědná za prezentaci modelu (objekt UI, dynamické HTML stránky) * Controller - reprezentuje komunikaci v systému, zpracovává reaguje na události (fyzicky uživatele)
Přimá závislost (X volá Y) view->model, controler->view, controler->model. Nepřímá závislost (observer) model->view
Architektonické vzory - PCMEF
PCMEF (Presentation, Control, Mediator, Entity, Foundation) je model architektury, tvořı́ hierarchickou strukturu a vývojář všechny komponenty musı́ přiřadit některé z nich.
* Presentation - uživatelské rozhraní (UI, interakce s uživatelem) * Control - zpracování požadavků (zpracovánı́ žádostı́, vnitřnı́ komunikace) * Mediator - práce s daty (prostřednı́k mezi DB a pamětı́ (programem)) - komunikuje s entity a foundation * Entity - ukládání aktuálně zpracovávaných dat (správa objektů v paměti) * Foundation - přímá komunikace s databází (základnı́ komunikace s DB (dotazy apod.))
Principy PCMEF:
1. Princip závislosti směrem dolů 2. Princip sdělovánı́ směrem nahoru 3. Princip komunikace sousedů 4. Princip seznamovacı́ho balı́ku 5. Princip explicitnı́ch asociacı́ 6. Princip eliminace cyklů 7. Princip pojmenovánı́ třı́d (P,C,M,E,F)