Archyno
UMLDiagramy štruktúry

UML diagramy komponentov

Systém ako sada vymeniteľných častí a zmluvy medzi nimi. Čo každý kus ponúka, čo potrebuje a - to užitočné - čo by ste museli dodržať, keby ste ho chceli vymeniť.

13 min čítaniaUML 2.5.117 z 35

Krátka odpoveď

  • Komponent je vymeniteľná jednotka s definovaným kontraktom - niečo, čo by ste vedeli zadať do súťaže - nie iba veľká trieda.
  • Každý komponent nesie dva zoznamy: čo poskytuje a čo vyžaduje. Vyžadovaná polovica sa najčastejšie vynecháva, a práve tá nesie závislosti.
  • Guľôčka na paličke je poskytované rozhranie, polmiska je vyžadované a guľôčka zapadnutá do misky sú tie dve spojené.
  • Komponent je logický, uzol je fyzický. Vo chvíli, keď škatuľa dostane názov hostiteľa alebo počet inštancií, kreslíte diagram nasadenia.
UML diagram komponentov. Komponent Checkout závisí od rozhrania IPayment, ktoré realizuje komponent Payment orchestrator. Orchestrátor zase závisí od rozhrania ILedger, ktoré realizuje komponent Ledger.
Štyri komponenty a dve zmluvy. Prerušovaná šípka s prázdnym trojuholníkom znamená „toto implementujem“; obyčajná prerušovaná šípka znamená „toto potrebujem“.

01Čo ukazuje#

Diagram komponentov popisuje systém ako vymeniteľné časti. Komponent v UML nie je hocijaká trieda - je to jednotka s definovanou hranicou, ktorá by sa v princípe dala vymeniť za inú implementáciu tých istých zmlúv bez toho, aby si to okolie všimlo.

V tej definícii je celá hodnota. Diagram vás núti pri každej časti zapísať práve dve veci: čo poskytuje a čo vyžaduje. Tieto dva zoznamy sú zmluvou tej časti so zvyškom systému a sú presne tým, čo naozaj potrebujete pri plánovaní migrácie, odhade prepisu alebo rozhodovaní, či je hranica služby na správnom mieste.

02Notácia#

PrvokNotáciaČo znamená
Komponentobdĺžnik s ikonou zástrčkyVymeniteľná jednotka. Ikona v rohu je forma UML 2; staršia forma dávala ikonu namiesto boxu.
Poskytované rozhranieKomponent implementuje túto zmluvu. Kreslí sa ako realizácia k «interface», alebo ako guľôčka na paličke.
Vyžadované rozhranieKomponent potrebuje, aby to niekto poskytol. Kreslí sa ako závislosť, alebo ako objímka - polovička pohárika na paličke.
Assembly konektorguľôčka sediaca v objímkePoskytované rozhranie jedného komponentu zapojené do vyžadovaného rozhrania druhého. Kompaktná forma dvoch riadkov vyššie.
Portmalý štvorec na hraniciPomenovaný bod interakcie. Použite ho, keď má jeden komponent viac odlišných kanálov - napríklad verejné API a administrátorské.
Delegačný konektorZ portu na vonkajšku k časti vnútri: túto vonkajšiu zmluvu v skutočnosti obsluhuje tamten vnútorný kus.

Forma guľôčky a objímky (ball and socket) je kompaktná a väčšina nástrojov ju kreslí predvolene: lízatko trčiace z komponentu je rozhranie, ktoré poskytuje, polovička pohárika je to, ktoré vyžaduje, a guľôčka spočívajúca v objímke sú obe zapojené do seba. Je to tá istá informácia ako šípky vyššie, len na menšom mieste. Použite tú, ktorú vaši čitatelia zvládnu ľahšie; v rámci jedného diagramu buďte konzistentní.

Každá značka, ktorú tento druh diagramu unesie - obe notácie rozhraní, assembly aj delegačné konektory, porty a štyri stereotypy, ktoré sa oplatí písať - je vysvetlená v symboloch diagramu komponentov.

03Aký veľký je komponent?#

Na tejto otázke uviazne každý prvý diagram komponentov a špecifikácia nepomôže: UML hovorí, že komponent je vymeniteľná jednotka s definovanou zmluvou, a veľkosť necháva úplne na vás. Pre normu je to správna odpoveď a pri tabuli nepoužiteľná, takže tu je pracovné pravidlo.

Komponent je to, čo by ste vedeli vypísať do súťaže. Ak si viete predstaviť, že inému tímu podáte zoznamy poskytovaných a vyžadovaných rozhraní a poviete „postavte toto, dovnútra sa nepozrieme“, je to komponent. Ak by si to odovzdanie vyžiadalo rozhovor o vnútornostiach, hranica je nakreslená na zlom mieste - a to je zistenie, nie kresliaci problém, ktorý treba obísť.

V praxi to zvyčajne dopadne na jednu z týchto možností a to, na ktorú, vám povie, na čo diagram je.

  • Nasaditeľná služba. Jeden repozitár, jedna pipeline, jedna pohotovosť. Najčastejšia odpoveď pri čomkoľvek postavenom za posledné desaťročie a úroveň, na ktorej sa oplatí držať diagram v repozitári.
  • Knižnica alebo modul. Vnútri jednej nasaditeľnej jednotky, keď sa spor vedie o vnútornú štruktúru - ktorý balík smie závisieť od ktorého. Tu často povie to isté lacnejšie diagram balíkov.
  • Celý systém. Mainframe, CRM, platobný poskytovateľ. Úroveň pre kontextový diagram, kde ide o to, od čoho závisíte, nie ako je to postavené.

Miešanie dvoch z týchto úrovní na jednom diagrame je chyba, ktorá vyrába tie rozbujnené diagramy komponentov, na ktoré si ľudia spomínajú. Obrázok s tromi mikroslužbami, jednou pomocnou knižnicou a „SAP“ sú tri diagramy položené na seba a žiadny čitateľ nerozozná, ktoré boxy sú si rovné.

04Ako ho poriadne čítať#

Najužitočnejšou technikou čítania je zakryť komponent dlaňou. Čo zostane, je jeho zmluva: rozhrania, ktoré k nemu boli pripojené. Ak ten zoznam viete podať inému tímu so slovami „postavte niečo, čo tomuto vyhovie“, diagram robí svoju prácu. Ak nie - ak by výmena komponentu vyžadovala vedieť veci, ktoré nakreslené nie sú - hranica je na zlom mieste, a to sa oplatí vedieť skôr, než sa o to niekto pokúsi.

Druhou technikou je sledovať vyžadované rozhrania. Každé z nich je závislosť, ktorú musí niekto naplniť, a cyklus v tomto grafe je skutočný architektonický problém, ktorý diagram komponentov okamžite zviditeľní.

Obe techniky sa ľahšie vidia použité než opísané. Päť diagramov systémov, na ktorých ste pravdepodobne pracovali - zdieľaný katalóg, porty a adaptéry, výmena legacy systému, hostiteľ zásuvných modulov a cyklus - je rozobratých v príkladoch diagramov komponentov, každý so sporom, ktorý rieši.

05Ktorý box vlastne kreslím?#

Päť druhov diagramov sú obdĺžniky spojené čiarami a rozdiel medzi nimi je úplne v tom, čím obdĺžnik je. Vybrať ten nesprávny je tu najdrahšia dostupná chyba, lebo diagram bude vyzerať v poriadku a odpovie na otázku, ktorú nikto nepoložil.

PrvokNotáciaČo znamená
Komponentovývymeniteľná jednotkaBoxy sú veci, ktoré sa dajú vymeniť za inú implementáciu tej istej zmluvy. Čiary sú poskytované a vyžadované rozhrania. Odpovedá: čo každá časť sľubuje a čo potrebuje?
TriednytypBoxy sú typy v kóde. Čiary sú asociácie, generalizácie a závislosti medzi nimi. Odpovedá: aký je tvar kódu? Pozrite diagram tried.
Balíkovýmenný priestorBoxy sú zoskupenia - priečinky, menné priestory, moduly. Čiary sú povolené závislosti. Odpovedá: čo smie importovať čo?
NasadeniauzolBoxy sú stroje, kontajnery a behové prostredia. Čiary sú komunikačné cesty. Odpovedá: kde to naozaj beží a cez čo? Pozrite diagram nasadenia.
Zloženej štruktúryčasť vnútri celkuBoxy sú časti, z ktorých je jeden klasifikátor zložený, nakreslené vnútri neho. Odpovedá: z čoho je táto vec vnútri postavená?

Ten istý obdĺžnik v piatich notáciách. Prečítajte si stredný stĺpec skôr, než začnete kresliť: je to veta, na ktorú je celý diagram odpoveďou.

Najčastejšie sa objaví otázka komponentový verzus nasadenia a rozdelenie je po vyslovení čisté: komponent je logická jednotka a uzol fyzická. Jeden komponent môže bežať na štyridsiatich uzloch; jeden uzol môže hostiť tucet komponentov. V okamihu, keď box na vašom diagrame komponentov dostane región, počet inštancií alebo názov hostiteľa, prestal byť komponentom a diagram sa potichu stal dvomi.

Ak ste sa stretli s C4, jeho diagram kontajnerov leží takmer presne tam, kde diagram komponentov na úrovni nasaditeľnej služby, a jeho vlastná úroveň „komponentov“ je o krok hlbšie, než UML zvyčajne myslí. Slovníky si nesadnú, takže na diagram napíšte, ktorý používate - ten jeden riadok legendy predíde väčšine sporov.

06Kedy taký diagram kresliť#

Siahnite po ňom, keď

  • Definovanie hraníc služieb pred rozdelením alebo zlúčením systémov
  • Zdokumentovanie toho, čo tím vlastní a od čoho závisí u iných
  • Plánovanie náhrady - zmluva je presne to, čomu musí nová vec vyhovieť
  • Kontrola, či závislosti tečú tak, ako architektúra tvrdí

Siahnite po niečom inom, keď

  • Myslíte fyzické stroje a procesy - použite diagram nasadenia
  • Myslíte vnútro jedného komponentu - použite diagram zloženej štruktúry
  • Časti sú triedy, nie vymeniteľné jednotky - použite diagram tried
  • Sú tri služby a všetci už vedia, ako sú prepojené

Diagramy komponentov starnú dobre, čo je nezvyčajné. Rozhrania sa menia oveľa pomalšie než kód za nimi, takže diagram komponentov uložený v repozitári zostáva pravdivý oveľa dlhšie než diagram tried toho istého systému - a zodpovedajúco viac sa oplatí ho udržiavať.

07Časté chyby#

  1. Komponenty, ktoré sú v skutočnosti triedy. Ak sa to nedá vierohodne vymeniť samostatne, nie je to komponent. Použite diagram tried.
  2. Nakreslené len poskytované rozhrania. Vyžadované nesú informáciu o závislostiach, čo je tá užitočnejšia polovica.
  3. Šípky medzi komponentmi bez rozhrania. Holá šípka hovorí „nejako závisí“, čo je práve to, čo má tento diagram spresniť.
  4. Primiešané nasadenie. Servery, regióny a kontajnery patria na diagram nasadenia.
  5. Rozhrania pomenované podľa poskytovateľa. ILedger je v poriadku, keď je jedna účtovná kniha; keď môžu byť dve implementácie, pomenujte zmluvu podľa schopnosti, nie podľa súčasného dodávateľa.

Po jednom riadku na každé

  1. 01Komponent je vymeniteľná jednotka s definovanou zmluvou, nie len veľká trieda.
  2. 02Každý komponent má dva zoznamy: čo poskytuje a čo vyžaduje.
  3. 03Realizácia (prázdny trojuholník, prerušovaná) ukazuje na implementované rozhranie.
  4. 04Závislosť (otvorená šípka, prerušovaná) ukazuje na vyžadované rozhranie.
  5. 05Guľôčka a objímka je kompaktná forma tej istej informácie.
  6. 06Zakryte komponent dlaňou: čo zostane, je to, čomu musí náhrada vyhovieť.

08Časté otázky#

Čo je notácia gule a objímky?

Je to skratka pre rozhrania. Poskytované rozhranie je lízanka, malý krúžok na paličke. Vyžadované rozhranie je objímka, polkruh. Zapadnutie gule do objímky ukazuje, že jeden komponent uspokojuje závislosť druhého, bez toho, aby ste rozhranie kreslili ako triedu.

Aký je rozdiel medzi diagramom komponentov a diagramom tried?

Diagram tried ukazuje typy a ich vnútornú štruktúru. Diagram komponentov ukazuje nasaditeľné, vymeniteľné jednotky a zmluvy medzi nimi a zámerne skrýva, čo je vnútri každej z nich. Odpovedá na otázku, čo by ste museli dodržať, aby ste časť vymenili.

Čo je port v UML?

Malý štvorec na okraji komponentu, ktorý predstavuje jeden odlišný bod interakcie. Porty dovoľujú komponentu vystaviť viac oddelených rozhraní, napríklad administrátorské a verejné API, namiesto jedinej nerozlíšenej plochy.

Kedy má zmysel kresliť diagram komponentov?

Keď má systém časti, ktoré by sa dali reálne vymeniť alebo kúpiť namiesto postaviť, a zaujímavou otázkou je rozhranie medzi nimi. Ak nie je v systéme nič vymeniteľné, diagram len zopakuje štruktúru balíkov.

V tejto sérii

Súvisiace články

Všetky články