Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilCrystal Watson
1
Mediator Několik slov o překladu slova do češtiny (prostředník, zprostředkovatel), vyzdvihnutí počeštěného slova mediátor. 1 1
2
Mediator - motivace Řízení letového provozu
Formulář, který všichni známe. Stručné připomenutí toho, jak se prvky vzájemně ovlivňují. 2 2
3
Mediator - motivace FontDialog
Závislosti mezi jednotlivými ovládacími prvky jsou netriviální Formulář, který všichni známe. Stručné připomenutí toho, jak se prvky vzájemně ovlivňují. 3 3
4
Mediator - motivace „Naivní“ přístup
každá komponenta obdrží ukazatele na „kolegy“, se kterými komunikuje chování je rozprostřeno mezi jednotlivými komponentami fontEntryField fontListBox styleEntryField styleListbox fontListBox fontEntryField styleEntryField preview Popsat zřejmé nevýhody tohoto řešení – náročná správa, špatná rozšiřitelnost,… styleListBox entryField preview preview 4 4
5
Mediator - motivace Řešení pomocí Mediatoru
každá komponenta obsahuje pouze ukazatel na jeden objekt - mediátor v něm je soustředěno chování celého dialogového okna styleEntryField mediator má přehled o jednotlivých widgetech, koordinuje interakce fontEntryField mediator fontListBox mediator aFontDialogDirector Popsat interakci a výhody tohoto řešení. styleListBox mediator preview 5 5
6
Mediator - chování Listbox a entry field o sobě vůbec neví
čas uživatel změní výběr v listboxu, ten ohlásí změnu mediátorovi, který předá aktuální položku do vstupního políčka Listbox a entry field o sobě vůbec neví o tom, že se má po změně někam něco vyplnit, se rozhoduje v mediátoru Interakce zprostředkovaně přes jeden objekt 6 6
7
Mediator - struktura rozhraní pro komunikaci kolegů
znají pouze svého mediátora veškerou komunikaci směřují na něj implementuje společné chování, zná a koordinuje kolegy 7 7
8
Mediator - implementace
varianty - abstraktní x konkrétní komunikace kolega-mediátor při „zajímavé“ události aktivně, když kolega něco potřebuje mediátor propaguje událost k dalším kolegům (x Chain of Responsibility) implementace komunikace speciální notifikační interface mediátora Observer kolegové vystupují jako subjekty při změně stavu upozorní observera-mediátora rozumná extrakce funkcionality – ne „god“ objekt mediátor neřídí celou funkcionalitu spolupracujících objektů jen zabezpečuje komunikaci mezi nimi Případ notifikačního interface je předávání ukazatele na sebe sama. 8 8
9
Mediator - implementace
Rozhraní/abstraktní třídy public interface IAirTrafficControl { void ReceiveAircraftLocation(Aircraft location); void RegisterAircraftUnderGuidance(Aircraft aircraft); } Rozhraní kolega → mediátor public abstract class Aircraft { private readonly IAirTrafficControl _atc; //z konstruktoru public int Altitude get { return _currentAltitude; } set _currentAltitude = value; _atc.ReceiveAircraftLocation(this); } public void Climb(int heightToClimb) Altitude += heightToClimb; Rozhraní mediátor → kolega 9 9
10
Mediator - implementace
Konkrétní chování v potomcích public class ATCenter : IAirTrafficControl { public void ReceiveAircraftLocation(Aircraft reportingAircraft) { foreach (var currentAircraft in _aircraftsUnderGuidance) { if (//moc blizko) //rozhodnout, ktere letadlo zmeni polohu a o kolik aircraft.Climb(1000); } public void RegisterAircraftUnderGuidance(Aircraft aircraft) { //pridat do kolekce _aircraftUnderGuidance } } public class Airbus321 : Aircraft public class Boeing : Aircraft public class Embraer190 : Aircraft Podle typu letadla různá bezpečná vzdálenost, různá priorita 10 10
11
Mediator - účel Účel Není to proti principům OOP?
Zapouzdření chování systému objektů Loose coupling Umožňuje měnit interakci objektů nezávisle na jejich vnitřní implementaci Zjednodušuje program SOLID – Single Responsibility Principle Není to proti principům OOP? Distribuce chování mezi jednotlivými objekty je přece většinou vítaná Ale jen do té doby, dokud nejde proti znovupoužitelnosti Slévání do monolitu Pár slov o spojení „Loose coupling“. Poznámky související se sléváním do monolitu: distribuce chování → velká propojenost jednotlivých objektů propojenost → objekt většinou nemůže pracovat bez ostatních i systém rozdělený na mnoho částí se chová jako monolit změnit chování distribuované do mnoha (stovek) objektů může být obtížné – dědičnost nám moc nepomůže 11 11
12
Mediator - důsledky Výhody a omezení
Odstraňuje nutnost referencí na všechny spolupracující objekty Kolegové o sobě navzájem nevědí -> reusability Zabstraktňuje způsob spolupráce objektů Odděluje kooperaci mezi objekty od jejich samostatného chování Kooperace lze řešit na jednom místě n:m interakce nahrazuje 1:m, které jsou jednodušší k pochopení i rozšiřování Centralizuje řízení Samotný mediátor může být složitý 12 12
13
Mediator - důsledky Co když komunikujeme s databází a reálnými letadly? public class ATCenter : IAirTrafficControl { public void ReceiveAircraftLocation(Aircraft reportingAircraft) { foreach (var currentAircraft in _aircraftsUnderGuidance) { if (//moc blizko) //rozhodnout, ktere letadlo zmeni polohu a o kolik aircraft.Climb(1000); } public void RegisterAircraftUnderGuidance(Aircraft aircraft) { //pridat do kolekce _aircraftUnderGuidance } } 13 13
14
Mediator - rozšířená verze
Použití v kombinaci s CQRS CQRS Command & Query Responsibility Segregation DDD – chceme vyjadřovat doménovou logiku Pokusíme se o tenkého Mediatora SRP – pouze komunikace objektů, doménová logika je v Handlerech DRY – znovupoužití Command / Query 14 14
15
Mediator - rozšířená verze
15 15
16
Mediator - rozšířená verze
Na font dialog je CQRS trochu overkill Ukážeme si reálný use case REST API v ASP.NET Core Autentikace uživatele 16 16
17
Mediator - rozšířená verze
ne cerne pozadi - pres dataprojektor to neni videt 17 17
18
Mediator - rozšířená verze
prilis maly font, necitelne, vyberte jen podstatne fragmenty ne cerne pozadi 18 18
19
Mediator - rozšířená verze
19 19
20
Mediator - použití Kdy sáhnout po mediátoru?
skupina objektů má komunikovat definovaným, ale složitým způsobem složité závislosti mezi objekty znovupoužití objektu je obtížné spolupracuje s mnoha jinými objekty chování distribuované mezi mnoho objektů bylo mělo být upravitelné bez nutnosti vytváření mnoha podtříd 20 20
21
Mediator – použití Možná použití – počítačový svět GUI
Instant messaging, sms zprávy mediátor – chatovací room, operátor kolegové – jednotliví klienti Dům budoucnosti – „smart home“ Mnoho různorodých zařízení lednice, klimatizace, topení, různá teplotní či vlhkostní čidla alarm, zamykání dveří, ... Potřeba koordinace (ne přímo řízení) alarm -> policie, sms majiteli dojde mléko -> objednat Paralelní a distribuované výpočty Synchronizace, mezivýsledky Obchodování na burze Řízení letového provozu Web services Trochu rozvést GUI. 21 21
22
Mediator – související NV
Facade Fasáda jen abstrahuje skupinu objektů do jednoho rozhraní Vnitřní objekty o ní neví Jednoduchá jednosměrná komunikace Nepřidává funkcionalitu Observer (publish – subscribe) Soupeř - možná alternativa v případě jednodušší komunikace Doplněk - kolegové mohou komunikovat s mediátorem pomocí Observera Chain of Responsibility Zasílání zpráv neznámým objektům přes zřetězené objekty CQRS 22 22
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.