Odkaz do seznamu¶
Motiv¶
Evidujeme auta a u každého jeho barvu. Barvy tvoří samostatný seznam. Každé auto má vybránu jednu barvu z tohoto seznamu. Dvě různá auta mohou mít tutéž barvu — odkazují na tutéž evidovanou instanci barvy.
Evidujeme faktury a u každé odběratele. Partneři tvoří samostatný seznam. Každá faktura má vybraného jednoho partnera ze seznamu. Více faktur může odkazovat na téhož partnera.
V obou případech existují dva samostatné seznamy s vlastními životními cykly. Instance prvního seznamu si vybere a naváže existující instanci druhého seznamu, kterou používá, ale nevlastní. Tatáž instance druhého seznamu může být sdílena více instancemi prvního. Tento vztah je vzor Odkaz do seznamu.
Zkratka¶
vidí → Auto má barvu. Instance si ze seznamu vybere cizí instanci, kterou vidí a používá, ale nevlastní.
Popis¶
Vzor Odkaz do seznamu popisuje vztah, ve kterém instance jedné Class drží odkaz na sdílenou instanci druhé Class z jejího samostatného seznamu. Vzor má slangová synonyma Odkaz do číselníku a Číselníková vazba; všechny tři názvy jsou rovnocenné.
Instance obou Class žijí ve dvou samostatných seznamech. Instance druhé Class vzniká nezávisle na instanci první; instance první vzniká nezávisle na tom, zda už cílová instance existuje.
Provázání instancí přichází dodatečně. Instance první Class si vybere existující instanci druhé Class ze seznamu a naváže se na ni. Toto provázání je výskyt asociace v běhu — Link (viz kapitola Asociace).
Vztah je použití bez vlastnictví. Instance první Class instanci druhé používá a vidí, ale není jejím majitelem. Instance druhé Class nevzniká rozením z první a nezaniká s ní.
Instance druhé Class je sdílená. Více instancí první Class může odkazovat na tutéž instanci druhé. Sdílení je u tohoto vzoru analyticky vyžadováno a odlišuje ho od kompozice.
Použití je jednosměrné. Instance první Class ví o své instanci druhé Class a používá ji. Instance druhé Class o instancích první, které na ni odkazují, nic neví a nenese na nich žádnou závislost.
Strukturovaný popis¶
Vzor spojuje dvě Class — source a destination — jednou asociací. Konec asociace u destination má multiplicitu 1 (povinný odkaz) nebo 0..1 (volitelný odkaz) a směrovost k destination. Instance source tak vidí a používá instanci destination, opačně ne.
V instanční rovině drží instance source Link na jednu instanci destination. Dvě instance source mohou držet Link na tutéž instanci destination (sdílení).
(Ilustrativní diagram: TBD.)
Účastníci¶
source— typClass, multiplicita dosazení1. Třída, jejíž instance drží odkaz a používá instancidestination.destination— typClass, multiplicita dosazení1. Třída, na jejíž sdílenou instanci se odkazuje.vazba— typAsociace, multiplicita dosazení0(statický prvek). Asociace, kterou vzor zavádí; vzor přebírá pevné vlastnosti jejího konce udestination: multiplicita1nebo0..1, směrovost kdestination.
Nejčastější chyby¶
Záměna za kompozici. V kompozici platí „svůj k svému" — instance části patří právě jedné instanci celku, vzniká s ní a zaniká s ní. Pokud cílová instance vzniká spolu se zdrojovou nebo ji zdrojová vlastní, vztah není Odkaz do seznamu, ale Kompozice (viz dále).
Záměna za sdílenou agregaci. Sdílená agregace je vztah celek/část s volnějšími pravidly životnosti. Odkaz do seznamu není vztah celek/část — destination je nezávislá entita, kterou source jen používá (viz dále).
Záměna za asociační třídu. Pokud samo spojení nese údaje (datum vzniku, kombinaci atributů), patří informace do třetí entity a vztah je Asociační třída, ne Odkaz do seznamu (viz dále).
Potlačení sdílení. Návrh, který brání dvěma instancím source odkazovat na tutéž instanci destination, popírá podstatu vzoru a posouvá ho k vlastnickému vztahu.
Obousměrné použití. Pokud zadání vyžaduje, aby instance destination znala instance source, jde o jiný vzor nebo o porušení směrovosti — řeší se, ne zavádí mlčky.
Vazby¶
Vzor Odkaz do seznamu je parametrickým vyjádřením metaclass Asociace pro konkrétní kombinaci vlastností konce asociace (viz kapitola Asociace). Stojí na BASE pojmech Class a Asociace (viz kapitoly Class, Asociace); vlastní BASE pojem nemá.
Sousední a konkurenční vzory CLM Lite: Kompozice ku 1, Kompozice ku N, Sdílená agregace, Asociační třída (viz dále).
Externí kotva: kniha Analytické modelování v praxi, kapitola 3.2.2 Vztah Odkaz do seznamu. V knize se vzor ilustruje příkladem Auto má barvu; konkrétní třídy C_Auto a C_Barva jsou použitím vzoru v modelu, ne součástí vzoru.
Verze a změny¶
- 1.0 — Early Access.