Archyno
UMLDiagramy štruktúry

Príklady diagramov komponentov

Päť diagramov komponentov systémov, na akých ste pravdepodobne robili. Každý má rozhodnúť jednu otázku: kto smie koho volať, čo by musela splniť náhrada a kde vedie závislosť opačne, než by mala.

9 min čítaniaUML 2.5.118 z 35

Krátka odpoveď

  • Najužitočnejší príklad je ten najmenší, ktorý rozhodne spor: dva alebo tri komponenty, rozhrania medzi nimi a nič viac.
  • Mikroslužby sa mapujú čisto - jedna služba na komponent, jedno publikované API na rozhranie. Kde bežia, je diagram nasadenia, nie tento.
  • Tri až deväť komponentov. Nad desať čitateľ prestane sledovať šípky a začne prebehávať očami - vtedy sa diagram stal dekoráciou.
  • Kreslite adaptér, nie databázu. Zmluva, na ktorej váš kód závisí, je tá informácia, ktorá stojí za nakreslenie; samotný produkt je infraštruktúra.
UML diagram komponentov. Komponent webového obchodu aj komponent mobilnej aplikácie závisia od rozhrania ICatalog, ktoré realizuje jediný komponent katalógovej služby.
Príklad jeden. Dvaja klienti, jeden kontrakt, jeden poskytovateľ - čiarkovaná šípka s dutým trojuholníkom znamená "toto implementujem", obyčajná čiarkovaná šípka znamená "toto potrebujem".

01Ako čítať tých päť#

Každý diagram nižšie používa tie isté tri značky, a ak ich viete prečítať, prečítate všetkých päť: komponent je box s ikonou zástrčky, «interface» je box pomenúvajúci kontrakt a šípky hovoria, na ktorej strane toho kontraktu každý komponent stojí. Čiarkovaná šípka s dutým trojuholníkom znamená toto implementujem. Obyčajná čiarkovaná šípka znamená toto potrebujem. Celá sada je v symboloch diagramu komponentov a úvaha za notáciou je v sprievodcovi diagramom komponentov.

Sú zoradené podľa toho, ako často sa ten tvar objavuje, nie podľa zložitosti. Každý pomenúva otázku, ktorú rieši, lebo diagram komponentov, ktorý nerieši nič, je najčastejším druhom a najmenej užitočným: päť boxov, päť šípok a žiadne tvrdenie, s ktorým by niekto mohol nesúhlasiť.

021. Dvaja klienti, jeden kontrakt#

Obrázok v hlavičke tohto článku. Webový obchod aj mobilná aplikácia potrebujú produktové dáta; jedna katalógová služba ich poskytuje. Rozhranie je nakreslené raz, medzi nimi.

Ten jediný box je celou pointou príkladu. Kým neexistoval, mali tí dvaja klienti dve rozdielne predstavy o tom, čo „katalóg“ vracia, a ten rozdiel žil v tom z nich, ktorý sa písal ako druhý. Pomenovať ICatalog si vynúti otázku, čím ten kontrakt vlastne je, a keď je raz pomenovaný, je zmena v ňom viditeľne zmenou pre dvoch spotrebiteľov, a nie úpravou jednej služby.

032. Porty a adaptéry#

UML diagram komponentov návrhu s portami a adaptérmi. Komponent HTTP API závisí od rozhrania IOrdering, ktoré realizuje komponent jadra objednávok. Jadro závisí od rozhrania IOrderStore, ktoré realizuje komponent adaptéra PostgreSQL.
Príklad dva. Jadro sedí medzi dvoma kontraktmi a nezávisí od žiadnej implementácie: HTTP API volá dovnútra cez IOrdering a k databáze sa dostáva cez IOrderStore.

Prečítajte si šípky a všimnite si, čoho sa jadro objednávok nedotýka. Nezávisí od HTTP a nezávisí od PostgreSQL. Realizuje jeden kontrakt a vyžaduje druhý, a oba sú boxy, ktoré mu mohol podať ktokoľvek.

Toto je tvar, ktorý ľudia myslia hexagonálnou architektúrou, portami a adaptérmi alebo čistou architektúrou, a diagram komponentov je najlacnejším spôsobom, ako overiť, či ju kódová základňa naozaj má. Ak má box jadra šípku mieriacu na databázový komponent namiesto na rozhranie, je ten vzor len ašpiráciou: niečo v strede importuje ovládač.

043. Jeden kontrakt, dve implementácie#

UML diagram komponentov. Komponent objednávkovej služby závisí od rozhrania IBilling. Realizujú ho dva komponenty: staršia fakturácia a nová fakturačná služba.
Príklad tri. Migračný diagram: obe fakturačné implementácie realizujú IBilling, takže objednávková služba nevie rozoznať, s ktorou hovorí.

Toto je diagram, ktorý sa kreslí pred výmenou, nie po nej. Tvrdenie, ktoré robí, je presné a testovateľné: všetko, čo objednávková služba od fakturácie potrebuje, je v IBilling, takže druhá implementácia toho rozhrania sa dá zapojiť bez toho, aby sa objednávková služba menila.

Je to zároveň najrýchlejší spôsob, ako zistiť, že to tvrdenie je nepravdivé. Ak niekto povie „nová služba nevie vystaviť PDF výpisy“, potom boli PDF výpisy súčasťou kontraktu a v rozhraní chýbajú, a diagram bol nesprávny skôr než migrácia. Ten rozhovor stojí desať minút pri tabuli a tri mesiace v produkcii.

Keď je stará implementácia preč, zmažte ju z diagramu. Diagram komponentov, ktorý dva roky po vypnutí stále ukazuje mainframe, je dôvodom, prečo ľudia prestanú diagramom veriť.

054. Architektúra so zásuvnými modulmi#

UML diagram komponentov architektúry so zásuvnými modulmi. Komponent hostiteľského editora závisí od rozhrania IExporter, ktoré realizujú tri komponenty: exportér PNG, exportér Mermaid a exportér Sparx .qea.
Príklad štyri. Ten istý tvar ako príklad tri, znamenajúci niečo iné: hostiteľ si nevyberá jeden exportér, je navrhnutý tak, aby prijal ľubovoľný počet.

Topologicky je toto príklad tri s pridanou treťou implementáciou, a pri tej podobnosti sa oplatí zastaviť: vymeniteľnosť a rozšíriteľnosť sú tá istá kresba. Líši sa zámer. Pri migrácii je realizácia navyše dočasná; pri architektúre so zásuvnými modulmi je produktom.

Technika čítania, ktorá sa tu vyplatí, je zakryť pravý stĺpec dlaňou. To, čo zostane - hostiteľ a IExporter- je všetko, čo autor štvrtého exportéra potrebuje vedieť. Ak odpoveď na otázku „môžem si napísať vlastný exportér?“ vyžaduje čítanie zdrojáku hostiteľa, je rozhranie nedostatočne špecifikované a diagram vám to práve povedal.

065. Ten s cyklom#

UML diagram komponentov ukazujúci cyklus závislostí. Služba Orders závisí od rozhrania IShipping, ktoré realizuje služba Shipping, a služba Shipping závisí od rozhrania IOrders, ktoré realizuje služba Orders.
Príklad päť. Objednávky potrebujú dopravu, doprava potrebuje objednávky. Ani jedna sa nedá nasadiť, otestovať ani vymeniť bez tej druhej, a diagram to spraví viditeľným na jeden pohľad.

Dve služby, každá realizujúca kontrakt, ktorý tá druhá vyžaduje. Nič tu nie je nelegálne UML a nič na diagrame nie je zle - tá kresba je presným obrázkom systému, ktorý bude náročný, a to je presne to, čo od diagramu chcete vedieť povedať.

Cyklus medzi komponentmi znamená, že ani jeden sa nedá pochopiť sám: žiadne nezávislé nasadenie, žiadny test v izolácii bez záslepky za ten druhý, a výmena ktoréhokoľvek musí naplniť kontrakt, od ktorého ten druhý súčasne závisí. Na diagrame tried je cyklus zápach; medzi nasaditeľnými jednotkami je to riziko harmonogramu.

Obvyklé nápravy sú viditeľné na tom istom obrázku. Presuňte to, čo doprava potrebuje, z IOrders do udalosti, ktorú objednávková služba publikuje, aby sa šípka stala jednosmernou. Alebo vytiahnite zdieľanú časť do tretieho komponentu, od ktorého závisia obe, čo cyklus zmení na zbiehanie a vráti vás k príkladu jeden.

Po jednom riadku na každé

  1. 01Zbiehanie (príklad 1): jeden kontrakt s viacerými spotrebiteľmi - pomenujte ho raz, meňte ho raz.
  2. 02Reťaz (príklad 2): jadro závisí od rozhraní na oboch koncoch a od implementácií ani na jednom.
  3. 03Dve realizácie (príklad 3): migračné tvrdenie, zapísané tam, kde sa dá vyvrátiť.
  4. 04Mnoho realizácií (príklad 4): tá istá kresba ako migrácia, mienená natrvalo.
  5. 05Cyklus (príklad 5): poctivý obrázok systému, ktorý sa nedá nasadzovať ani vymieňať po častiach.
  6. 06Ak diagram nerieši žiadny spor, je ozdobou - radšej ho zmažte, než by ste ho udržiavali.

Na nakreslenie jedného z týchto oproti vášmu systému je verzia krok za krokom v článku ako nakresliť diagram komponentov. Na to, kde tie komponenty bežia, namiesto toho, čo si navzájom sľubujú, je diagram nasadenia.

07Časté otázky#

Ako vyzerá dobrý príklad diagramu komponentov?

Najužitočnejší príklad je ten najmenší, ktorý rozhodne spor: dva alebo tri komponenty, rozhrania medzi nimi a nič viac. Diagram zdieľaného katalógu, ktorý používa web aj mobilná aplikácia, povie viac než stena štyridsiatich boxov - čitateľ ho udrží v hlave naraz a vie ho overiť oproti kódu.

Dá sa diagramom komponentov zobraziť architektúra mikroslužieb?

Áno a je to jedno z jeho lepších použití. Každá služba je komponent a každé publikované API je rozhranie, takže diagram presne hovorí, ktorá služba smie volať ktorú zmluvu. Nesmie však ukazovať, kde tie služby bežia - to je diagram nasadenia a miešanie oboch vyrobí obrázok, ktorý sa nedá skontrolovať.

Koľko komponentov má byť na jednom diagrame?

Tri až približne deväť. Pod tri niet čo kresliť a nad deväť či desať čitateľ prestane sledovať šípky a začne len prebehávať očami - vtedy sa diagram mení na dekoráciu. Veľký systém sa kreslí ako viac diagramov, jeden na každú otázku.

Má sa databáza kresliť ako komponent?

Kreslite adaptér, nie databázu. Diagram je o zmluve, na ktorej váš kód závisí, takže komponent PostgreSQL adaptér realizujúci rozhranie IOrderStore nesie tú užitočnú informáciu. Samotný databázový produkt je infraštruktúra a patrí do diagramu nasadenia.

V tejto sérii

Súvisiace články

Všetky články