V mnoha školeních a konzultacích jsem takřka pokaždé narazil na rozepře mezi vývojáři o nasazení vztahu Extend. Jak se má tento vztah používat správně a korektně?
Základní problémy tohoto vztahu spočívají v následujících třech bodech:
- Vztah Extend působí takříkajíc v „obráceném garde“
- Vztah Extend se používá ve velmi specifické situaci a pro velmi specifický účel. Dokonce pokud tato specifická situace nenastane, nesmí se použít a musí se nasadit vztah Include.
- Vztah Extend je v technologii realizován zvláštními technikami programování a analytik musí mít dobrou představu o tom, jak může být vztah Extend realizován v programu přímo technologicky, jinak má problém s jeho pochopením.
Interakce „v obráceném garde“
Nejprve si vysvětlíme první bod, tj. co to znamená, že vztah působí „v obráceném garde“.
Zaveďme dva případy užití, např. A a B, a mezi nimi vztah Extend např. takto:
Interakce je zde pro názornost a úmyslně namalována „zprava doleva“. Směr závislosti odvozený od směru tohoto vztahu je dán směrem šipky tohoto vztahu, tj. od B k A, tedy případ užití B potřebuje A, ale případ užití A nepotřebuje B. Případ užití B je zde v roli jako tzv. „extendující“, případ užití A je v roli tzv. „extendovaný“ .
Okolí těchto dvou případů užití používá případ užití A, nikoliv případ užití B, např. takto:
Dobrá představa je, že extendující případ užití B je nějak „zaháčkován“ k extendovanému případu užití A (aniž by to A věděl) a bude nějakým zvláštním způsobem z A vyvolán, tj. použit. K tomuto bodu se ještě vrátíme v dalším výkladu.
Kdy se Extend používá
Základní vlastností interakce Extend je zmíněný směr závislosti, tj. skutečnost, že okolí (např. Actor X) přistupuje k extendovanému případu užití A jako k nosnému, hlavnímu případu užití (ten potřebuje použít) a tento „nějak vyvolá“ použití extendujícího případu užití B, o kterém on sám neví.
Vztah Extend se zásadně používá pouze a jenom tam, kde je tento směr vazby od B k A takto vyžadován a nikde jinde. Protože případ užití A neví nic o případu užití B (a přitom jej vyvolává), lze přidávat další a další extendující případy užití bez zásahu do případu užití A a takto se žádá, aby byl také navržen i program. Tyto situace nastávají např. při nasazení událostí (vzor OBSERVER, LISTENER, delegáti apod.), nebo u flexibilně přidávaných aditivních funkcionalit (vzor COMMAND) apod. V jiných situacích, kdy případ užití A přímo oslovuje případ užití B a používá jej „natvrdo“ (a tedy je na něm závislý) se tento vztah nesmí použít, zde je třeba nasadit správně vztah Include. Pro posouzení, zda použít vztah Extend nebo vztah Include, je tedy rozhodující směr závislosti ve vztahu obou případů užití.
Příklad chybného použití vztahu Extend
Představme si scénář nějakého případu užití UCX, ve kterém se ze zobrazeného seznamu osob vybírá osoba, přičemž pokud uživatel v seznamu osobu nenajde, může do systému založit novou osobu pomocí vyvolání případu užití Založení nové osoby přímo z tohoto případu užití a tím ji přidat do seznamu osob. Mnohdy autoři tuto situaci (resp. podobné) malují jako Extend, což je chybně, protože směr závislosti je přesně naopak, než Extend vyžaduje. V tomto případě se jedná o přímé použití, tj. případ užití UCX natvrdo a přímo použije případ užití Založení nové osoby. Závislost je evidentně ve směru od UCX k Založení nové osoby, nikoliv naopak, a patří sem tedy správně vztah Include a nikoliv Extend.
V příštím pokračování článku se dovíme, jak se Extend používá přímo na ukázkovém příkladu konkrétně i s postupem v EA a poukážeme na další chybná použití vztahu Extend resp. doporučené alternativní použití vztahu Generalizace
pokračování následuje
Napsat komentář