Archyno
UMLDiagramy struktury

Příklady diagramů komponent

Pět diagramů komponent systémů, na jakých jste nejspíš dělali. Každý má rozhodnout jednu otázku: kdo smí koho volat, co by musela splnit náhrada a kde vede závislost opačně, než by měla.

9 min čteníUML 2.5.118 z 35

Krátká odpověď

  • Nejužitečnější příklad je ten nejmenší, který rozhodne spor: dvě nebo tři komponenty, rozhraní mezi nimi a nic dalšího.
  • Mikroslužby se mapují čistě - jedna služba na komponentu, jedno publikované API na rozhraní. Kde běží, je diagram nasazení, ne tenhle.
  • Tři až devět komponent. Nad deset čtenář přestane sledovat šipky a začne přebíhat očima - tehdy se diagram stal dekorací.
  • Kreslete adaptér, ne databázi. Smlouva, na které váš kód závisí, je ta informace, která stojí za nakreslení; samotný produkt je infrastruktura.
UML diagram komponent. Komponenta webového obchodu i komponenta mobilní aplikace závisí na rozhraní ICatalog, které realizuje jediná komponenta katalogové služby.
Příklad jedna. Dva klienti, jeden kontrakt, jeden poskytovatel - čárkovaná šipka s dutým trojúhelníkem znamená "tohle implementuji", obyčejná čárkovaná šipka znamená "tohle potřebuji".

01Jak číst těch pět#

Každý diagram níže používá tytéž tři značky, a pokud je umíte přečíst, přečtete všech pět: komponenta je box s ikonou zástrčky, «interface» je box pojmenovávající kontrakt a šipky říkají, na které straně toho kontraktu každá komponenta stojí. Čárkovaná šipka s dutým trojúhelníkem znamená tohle implementuji. Obyčejná čárkovaná šipka znamená tohle potřebuji. Celá sada je v symbolech diagramu komponent a úvaha za notací je v průvodci diagramem komponent.

Jsou seřazené podle toho, jak často se ten tvar objevuje, ne podle složitosti. Každý pojmenovává otázku, kterou řeší, protože diagram komponent, který neřeší nic, je nejčastějším druhem a nejméně užitečným: pět boxů, pět šipek a žádné tvrzení, se kterým by někdo mohl nesouhlasit.

021. Dva klienti, jeden kontrakt#

Obrázek v hlavičce tohohle článku. Webový obchod i mobilní aplikace potřebují produktová data; jedna katalogová služba je poskytuje. Rozhraní je nakreslené jednou, mezi nimi.

Ten jediný box je celou pointou příkladu. Než existoval, měli ti dva klienti dvě rozdílné představy o tom, co „katalog“ vrací, a ten rozdíl žil v tom z nich, který se psal jako druhý. Pojmenovat ICatalog si vynutí otázku, čím ten kontrakt vlastně je, a jakmile je pojmenovaný, je změna v něm viditelně změnou pro dva spotřebitele, a ne úpravou jedné služby.

032. Porty a adaptéry#

UML diagram komponent návrhu s porty a adaptéry. Komponenta HTTP API závisí na rozhraní IOrdering, které realizuje komponenta jádra objednávek. Jádro závisí na rozhraní IOrderStore, které realizuje komponenta adaptéru PostgreSQL.
Příklad dva. Jádro sedí mezi dvěma kontrakty a nezávisí na žádné implementaci: HTTP API volá dovnitř přes IOrdering a k databázi se dostává přes IOrderStore.

Přečtěte si šipky a všimněte si, čeho se jádro objednávek nedotýká. Nezávisí na HTTP a nezávisí na PostgreSQL. Realizuje jeden kontrakt a vyžaduje druhý, a oba jsou boxy, které mu mohl podat kdokoli.

Tohle je tvar, který lidé myslí hexagonální architekturou, porty a adaptéry nebo čistou architekturou, a diagram komponent je nejlevnějším způsobem, jak ověřit, jestli ji kódová základna opravdu má. Pokud má box jádra šipku mířící na databázovou komponentu místo na rozhraní, je ten vzor jen aspirací: něco uprostřed importuje ovladač.

043. Jeden kontrakt, dvě implementace#

UML diagram komponent. Komponenta objednávkové služby závisí na rozhraní IBilling. Realizují ho dvě komponenty: starší fakturace a nová fakturační služba.
Příklad tři. Migrační diagram: obě fakturační implementace realizují IBilling, takže objednávková služba nepozná, se kterou mluví.

Tohle je diagram, který se kreslí před výměnou, ne po ní. Tvrzení, které dělá, je přesné a testovatelné: všechno, co objednávková služba od fakturace potřebuje, je v IBilling, takže druhá implementace toho rozhraní se dá zapojit, aniž by se objednávková služba měnila.

Je to zároveň nejrychlejší způsob, jak zjistit, že to tvrzení je nepravdivé. Pokud někdo řekne „nová služba neumí vystavit PDF výpisy“, pak byly PDF výpisy součástí kontraktu a v rozhraní chybí, a diagram byl nesprávný dřív než migrace. Ten rozhovor stojí deset minut u tabule a tři měsíce v produkci.

Když je stará implementace pryč, smažte ji z diagramu. Diagram komponent, který dva roky po vypnutí pořád ukazuje mainframe, je důvodem, proč lidé přestanou diagramům věřit.

054. Architektura se zásuvnými moduly#

UML diagram komponent architektury se zásuvnými moduly. Komponenta hostitelského editoru závisí na rozhraní IExporter, které realizují tři komponenty: exportér PNG, exportér Mermaid a exportér Sparx .qea.
Příklad čtyři. Tentýž tvar jako příklad tři, znamenající něco jiného: hostitel si nevybírá jeden exportér, je navržený tak, aby přijal libovolný počet.

Topologicky je tohle příklad tři s přidanou třetí implementací, a u té podobnosti se vyplatí zastavit: vyměnitelnost a rozšiřitelnost jsou tatáž kresba. Liší se záměr. U migrace je realizace navíc dočasná; u architektury se zásuvnými moduly je produktem.

Technika čtení, která se tu vyplatí, je zakrýt pravý sloupec dlaní. To, co zbude - hostitel a IExporter- je všechno, co autor čtvrtého exportéru potřebuje vědět. Pokud odpověď na otázku „můžu si napsat vlastní exportér?“ vyžaduje čtení zdrojáku hostitele, je rozhraní nedostatečně specifikované a diagram vám to právě řekl.

065. Ten s cyklem#

UML diagram komponent ukazující cyklus závislostí. Služba Orders závisí na rozhraní IShipping, které realizuje služba Shipping, a služba Shipping závisí na rozhraní IOrders, které realizuje služba Orders.
Příklad pět. Objednávky potřebují dopravu, doprava potřebuje objednávky. Ani jedna se nedá nasadit, otestovat ani vyměnit bez té druhé, a diagram to udělá viditelným na jeden pohled.

Dvě služby, každá realizující kontrakt, který ta druhá vyžaduje. Nic tu není nelegální UML a nic na diagramu není špatně - ta kresba je přesným obrázkem systému, který bude náročný, a to je přesně to, co od diagramu chcete umět říct.

Cyklus mezi komponentami znamená, že ani jedna se nedá pochopit sama: žádné nezávislé nasazení, žádný test v izolaci bez záslepky za tu druhou, a výměna kterékoli musí naplnit kontrakt, na kterém ta druhá zároveň závisí. Na diagramu tříd je cyklus zápach; mezi nasaditelnými jednotkami je to riziko harmonogramu.

Obvyklé nápravy jsou vidět na témže obrázku. Přesuňte to, co doprava potřebuje, z IOrders do události, kterou objednávková služba publikuje, aby se šipka stala jednosměrnou. Nebo vytáhněte sdílenou část do třetí komponenty, na které závisí obě, což cyklus změní na sbíhání a vrátí vás k příkladu jedna.

Po jednom řádku na každé

  1. 01Sbíhání (příklad 1): jeden kontrakt s několika spotřebiteli - pojmenujte ho jednou, měňte ho jednou.
  2. 02Řetěz (příklad 2): jádro závisí na rozhraních na obou koncích a na implementacích ani na jednom.
  3. 03Dvě realizace (příklad 3): migrační tvrzení, zapsané tam, kde se dá vyvrátit.
  4. 04Mnoho realizací (příklad 4): tatáž kresba jako migrace, míněná natrvalo.
  5. 05Cyklus (příklad 5): poctivý obrázek systému, který se nedá nasazovat ani vyměňovat po částech.
  6. 06Pokud diagram neřeší žádný spor, je ozdobou - raději ho smažte, než abyste ho udržovali.

Na nakreslení jednoho z těchhle proti vašemu systému je verze krok za krokem v článku jak nakreslit diagram komponent. Na to, kde ty komponenty běží, místo toho, co si navzájem slibují, je diagram nasazení.

07Časté dotazy#

Jak vypadá dobrý příklad diagramu komponent?

Nejužitečnější příklad je ten nejmenší, který rozhodne spor: dvě nebo tři komponenty, rozhraní mezi nimi a nic dalšího. Diagram sdíleného katalogu, který používá web i mobilní aplikace, řekne víc než stěna čtyřiceti boxů - čtenář ho udrží v hlavě naráz a umí ho ověřit proti kódu.

Lze diagramem komponent zobrazit mikroslužby?

Ano a je to jedno z jeho lepších použití. Každá služba je komponenta a každé publikované API je rozhraní, takže diagram přesně říká, která služba smí volat kterou smlouvu. Nesmí ale ukazovat, kde ty služby běží - to je diagram nasazení a míchání obojího vyrobí obrázek, který nejde zkontrolovat.

Kolik komponent má být na jednom diagramu?

Tři až zhruba devět. Pod tři není co kreslit a nad devět či deset čtenář přestane sledovat šipky a začne jen přebíhat očima - tehdy se diagram mění v dekoraci. Velký systém se kreslí jako více diagramů, jeden na každou otázku.

Má se databáze kreslit jako komponenta?

Kreslete adaptér, ne databázi. Diagram je o smlouvě, na které váš kód závisí, takže komponenta PostgreSQL adaptér realizující rozhraní IOrderStore nese tu užitečnou informaci. Samotný databázový produkt je infrastruktura a patří do diagramu nasazení.

V této sérii

Související články

Všechny články