Mediator Mediator motivace zen letovho provozu Mediator motivace

  • Slides: 22
Download presentation
Mediator

Mediator

Mediator - motivace ■ Řízení letového provozu

Mediator - motivace ■ Řízení letového provozu

Mediator - motivace ■ Font. Dialog ❑ Závislosti mezi jednotlivými ovládacími prvky jsou netriviální

Mediator - motivace ■ Font. Dialog ❑ Závislosti mezi jednotlivými ovládacími prvky jsou netriviální

Mediator - motivace ■ „Naivní“ přístup každá komponenta obdrží ukazatele na „kolegy“, se kterými

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 ❑ font. Entry. Field font. List. Box style. Entry. Field style. Listbox font. List. Box font. Entry. Field style. Entry. Field preview style. List. Box entry. Field preview

Mediator - motivace ■ Řešení pomocí Mediatoru každá komponenta obsahuje pouze ukazatel na jeden

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 ❑ font. Entry. Field mediator font. List. Box mediator style. Entry. Field mediator má přehled o jednotlivých widgetech, koordinuje interakce a. Font. Dialog. Director style. List. Box mediator preview

Mediator - chování čas ❑ ■ Listbox a entry field o sobě vůbec neví

Mediator - chování čas ❑ ■ Listbox a entry field o sobě vůbec neví ❑ ■ 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 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

Mediator - struktura rozhraní pro komunikaci kolegů implementuje společné chování, zná a koordinuje kolegy

Mediator - struktura rozhraní pro komunikaci kolegů implementuje společné chování, zná a koordinuje kolegy znají pouze svého mediátora veškerou komunikaci směřují na něj

Mediator - implementace ■ Implementace ❑ varianty - abstraktní x konkrétní ❑ komunikace kolega-mediátor

Mediator - implementace ■ 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

Mediator - implementace ■ Rozhraní/abstraktní třídy public interface IAir. Traffic. Control { void Receive.

Mediator - implementace ■ Rozhraní/abstraktní třídy public interface IAir. Traffic. Control { void Receive. Aircraft. Location(Aircraft location); } Rozhraní kolega → mediátor void Register. Aircraft. Under. Guidance(Aircraft aircraft); public abstract class Aircraft { private readonly IAir. Traffic. Control _atc; //z konstruktoru public int Altitude { get { return _current. Altitude; } set { _current. Altitude = value; _atc. Receive. Aircraft. Location(this); } } Rozhraní mediátor → kolega public void Climb(int height. To. Climb) { Altitude += height. To. Climb; } }

Mediator - implementace ■ Konkrétní chování v potomcích public class ATCenter : IAir. Traffic.

Mediator - implementace ■ Konkrétní chování v potomcích public class ATCenter : IAir. Traffic. Control { public void Receive. Aircraft. Location(Aircraft reporting. Aircraft) { foreach (var current. Aircraft in _aircrafts. Under. Guidance) { if (//moc blizko) { //rozhodnout, ktere letadlo zmeni polohu a o kolik aircraft. Climb(1000); } } } public void Register. Aircraft. Under. Guidance(Aircraft aircraft) { //pridat do kolekce _aircraft. Under. Guidance } public class Airbus 321 : Aircraft public class Boeing 737200 : Aircraft public class Embraer 190 : Aircraft Podle typu letadla různá bezpečná vzdálenost, různá priorita

Mediator - účel ■ Účel ❑ Zapouzdření chování systému objektů ■ ■ ■ Loose

Mediator - účel ■ Účel ❑ 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

Mediator - důsledky ■ Výhody a omezení ❑ Odstraňuje nutnost referencí na všechny spolupracující

Mediator - důsledky ■ Výhody a omezení ❑ Odstraňuje nutnost referencí na všechny spolupracující objekty ■ ❑ Zabstraktňuje způsob spolupráce objektů ■ ■ ■ ❑ Kolegové o sobě navzájem nevědí -> reusability 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ý

Mediator - důsledky ■ Co když komunikujeme s databází a reálnými letadly? public class

Mediator - důsledky ■ Co když komunikujeme s databází a reálnými letadly? public class ATCenter : IAir. Traffic. Control { public void Receive. Aircraft. Location(Aircraft reporting. Aircraft) { foreach (var current. Aircraft in _aircrafts. Under. Guidance) { if (//moc blizko) { //rozhodnout, ktere letadlo zmeni polohu a o kolik aircraft. Climb(1000); } } } public void Register. Aircraft. Under. Guidance(Aircraft aircraft) { //pridat do kolekce _aircraft. Under. Guidance }

Mediator - rozšířená verze ■ Použití v kombinaci s CQRS ❑ CQRS ■ ❑

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

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - rozšířená verze ❑ Na font dialog je CQRS trochu overkill ❑ Ukážeme

Mediator - rozšířená verze ❑ Na font dialog je CQRS trochu overkill ❑ Ukážeme si reálný zjednodušený use case ■ ■ REST API v ASP. NET Core Autentizace uživatele

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - rozšířená verze

Mediator - použití ■ Kdy sáhnout po mediátoru? ❑ skupina objektů má komunikovat definovaným,

Mediator - použití ■ Kdy sáhnout po mediátoru? ❑ skupina objektů má komunikovat definovaným, ale složitým způsobem ■ ❑ znovupoužití objektu je obtížné ■ ❑ složité závislosti mezi objekty spolupracuje s mnoha jinými objekty chování distribuované mezi mnoho objektů by mělo být upravitelné bez nutnosti vytváření mnoha podtříd

Mediator – použití ■ Možná použití – počítačový svět GUI ❑ Instant messaging, sms

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 ❑

Mediator – související NV ■ Související NV ❑ Facade ■ Fasáda jen abstrahuje skupinu

Mediator – související NV ■ Související NV ❑ Facade ■ Fasáda jen abstrahuje skupinu objektů do jednoho rozhraní ❑ ■ ■ ❑ ■ Soupeř - možná alternativa v případě jednodušší komunikace Doplněk - kolegové mohou komunikovat s mediátorem pomocí Observera Chain of Responsibility ■ ■ Jednoduchá jednosměrná komunikace Nepřidává funkcionalitu Observer (publish – subscribe) ■ ❑ Vnitřní objekty o ní neví Zasílání zpráv neznámým objektům přes zřetězené objekty CQRS