CZJUG – netradiční návrhové vzory

Slides:



Advertisements
Podobné prezentace
Normalizace Řada analytiků se mylně domnívá, že pro každý objekt existuje jedno jediné univerzálně použitelné nejlepší řešení bez ohledu na řešený problém.
Advertisements

Stránka 1, © Vema, a. s.. Stránka 2, © Vema, a. s. Podnikové aplikace  Integrovaný podnikový systém (Integrated Business System):  komplex aplikací.
Stručný úvod do UML.
Ing. Jan Mittner MySQL Workbench 2. Základy práce s databází 3. Subversion 2.
Databázové systémy Přednáška č. 2 Proces návrhu databáze.
Přednáška č. 5 Proces návrhu databáze
Workflow Foundation Základy a architektura
Modelování procesů pomocí workflow
Programová rozhraní pro grafické adaptéry
Filtr významnosti jako framework pro prezentační vrstvu
C# pro začátečníky Mgr. Jaromír Osčádal
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
A4M33NMS Návrh a modelování softwarových systémů
Třídění PA. Kompaktní PA (KPA) -menší - měly původně pevně danou konfiguraci integrovaných modulů a byly uzavřeny v jednom pouzdře. -Pouzdro se montuje.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
Tvorba webových aplikací
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
NET Genium software pro výstavbu a provoz informačního portálu Martin Vonka
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Ing. Jiří Šilhán.  představuje komplex aplikačního a základního software, technických prostředků, podnikových procesů a personálních zdrojů určených.
Vývoj aplikací pro SharePoint
Objektové programování
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
Absolventská práce 2002 Aplikace XML rozhraní v prostředí krajského úřadu Autor : Marek Cop Vedoucí : Ing. Petr Pavlinec 2002.
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Relační databáze.
Tomáš Urych, ESO9 Intranet a.s.
ICQ. Co je ICQ? ICQ je nejpoužívanější a nejpopulárnější komunikační program. ICQ je zkratka slangového výrazu „I seek you“ (hledám tě). Slouží ke komunikaci.
Plán testů Tým FelPay. Testování a kvalita obecně Přispívá ke správné funkci systému Přispívá ke správné funkci systému Snižuje finanční a časové ztráty.
Databázové systémy Přednáška č. 6 Proces návrhu databáze.
Možnosti modelování požadavků na informační systém
B. Miniberger, BIVŠ Praha 2009
Transparentní modelování a provádění procesů Michael Juřek Software Architect Microsoft s.r.o.
Dokumentace objektů a zveřejnění funkcí
Představujeme Ensemble Michal Tomek. Na tomto obrázku vidíte, co systému Ensemble chybí:
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
1 Kognitivní inspirace třídění na základě závislostí atributů Jan Burian Eurfomise centrum – Kardio, Ústav informatiky AV ČR Článek je dostupný na WWW:
Dokumentace informačního systému
Ukládání heterogenních dat pomocí rozvolněných objektů Michal Žemlička.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Česko a Slovensko, výhledy do budoucnosti Michal Tomek – InterSystems BV.
Filtr významnosti jako framework pro prezentační vrstvu Ing. Igor Kopetschke – TUL, NTI
KL Free IS Informační systém pro regionální síť KLfree.net.
Vzor na všechno. Vzor – úvod Problém .. Příklad: widgety .. Jak na to? .. Známý také jako...
Vzdálená správa Tomáš Kalný.
1 E - S V Ě T S E T O Č Í S T Á L E R Y C H L E J I. S T A Č Í T E M U ? Fenix II –IS na platformě.NET Michal Varga.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Databázové systémy Datové modely.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Univerzita Karlova v Praze Lékařská fakulta v Plzni Oddělení OVAVT Jestliže chcete oživit systém Vaší výuky, „online learning systém“ Vám nabízí? Jednoduché.
StringData s.r.o. | Antala Staška 510/38 | Praha 4 | TEL: BENEFLEX VĚRNOSTNÍ PROGRAM Prezentace řešeni.
Delphi – práce se základními komponentami (2. hodina) OB21-OP-EL-KON-DOL-M-4-008B Orbis pictus 21. století.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Úvod do databázových systémů
Programování mikropočítačů Platforma Arduino
SOLID principy v OOP návrhu
Služby Windows Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
OPERAČNÍ SYSTÉMY Číslo projektu CZ.1.07/1.5.00/ Název školy
Vlastnosti souborů Jaroslava Černá.
Integrace IS na datové vrstvě
Návrhový vzor Flyweight
Configuration Patterns
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
Redakční systém s integrací webových služeb
Operační systémy.
Unit of Work vzor z P of EAA (Fowler) 1.
Decorator.
Monitor Object 1.
Dfdfdf.
GRASP Patterns.
Transkript prezentace:

CZJUG – netradiční návrhové vzory René Stein Senior Software Architect rene@renestein.net

Agenda Návrhové vzory – úvod Component configurator Thread specific storage (PseudoSingleton) Extension Interface Special Case Object Interceptor Volná diskuze.

Specializované návrhové vzory Návrhové vzory nejsou kupodivu jen „Singletony“ - ani pouze GoF vzory. Od mnoha vývojářů jsem slyšel větu „na co vzory, když už mám všechno ve frameworku a teď se naučím jen další xml jazyk pro konfiguraci knihovny“.  Podle mě je nebezpečné vyvíjet aplikace založené na skládání „vygooglovaných“ slepenců, které „nějak“ zatím fungují. U speciálních vlastních řešení nemusím použít 5% funkcí z nějaké megalomanské knihovny, ale napíšu si odlehčenou a pro mé účely lépe přizpůsobenou knihovnu.

Návrhový vzor a jeho vztah k Frameworkům Návrhový vzor je mnohem abstraktnější a univerzálnější než Framework Návrhový vzor je menší stavební jednotkou designu než Framework Frameworky se specializují na určité oblasti (Business aplikace – J2EE, .NET Framework) Frameworky jsou ale většinou sestavené z návrhových vzorů => při znalosti vzorů vývojářem je učení se snazší. Návrhový vzor i Framework usilují o totéž – o znovupoužití znalostí, případně kódu.

Component Configurator Vzor pro separaci administračních úloh (zastavení, spuštění, rekonfigurace) a vlastní činnosti komponent. Různé části aplikace jsou primadony vyžadující speciální zacházení, nebo raději šedé průměrné předvídatelné myšky reagující na správné povely?  Zavedením Component configuratoru můžeme z jednoho „místa“ spravovat seznam aktivních komponent a za běhu aplikace komponenty měnit (např. výměna komponenty pro odesílání SMS, aniž bychom museli aplikaci rekompilovat a restartovat)

Výchozí služby a generická varianta (funkčně chudého) repozitáře služeb

Dodatky ke Component Configuratoru I Známý příklad představují Windows služby Applety v Javě jsou variací myšlenky Component Configuratoru (init, getAppletInfo). Kromě repozitáře-prostého skladiště můžeme pro všechny komponenty nabídnout speciální služby Možnost „skládat - řetězit“ komponenty (návrhový vzor Composite). Speciální služba pro komponenty čeká na tcp připojení klienta a poté požadavek přepošle komponentě, která má o komunikaci na daném portu zájem. (Vzory Reactor –Proactor).

Thread Specific Storage V multithreadovém si nevystačíme s jedním globálním přístupovým bodem k nějaké instanci. U Singletonů (UnitOfWork, DB komponenta) chceme, aby každý thread přistupoval k jedinému logickému přístupovému bodu, který ale pro každý thread udržuje právě jednu specifickou instanci. Ukázka jednoduché implementace (nevýkonné)

JAVA a Thread Specific Storage ThreadLocal Metody initialValue, get, set V každém jazyce bývá speciální podpora. Visual C++ - __declspec(thread) int number; .Net Framework - atribut ThreadStatic

Další poznámky ke vzoru Thread specific storage Úložiště pro všechny threadově specifické objekty v jedné kolekci => minimum kritických sekcí. Kdy odstraníme objekt v threadově specifickém úložisti? „Hook“ metody. Použití návrhového vzoru proxy Výhodné je, že se nemění API a klienti třídy si ani nemusí být vědomi, že instance dané třídy už není v systému jen jedna, ale že jsou instance vytvářeny pro všechny přistupující thready. Ale někdy jde jen o další matoucí obskurnost...

Extension Interface Rozhraní (v obojím významu) by mělo být stabilní. Rozhraní je ale potřeba často měnit Přidání metody = nekompatibilita se stávajícími klienty Změna signatury metody = nekompatibilita se stávajícími klienty Problém s „komponentami“, jejichž rozhraní připomíná univerzální božský nástroj s ovládacími prvky pro řízení všech rozmanitostí světa. Pohanský a kacířský nástroj. Ruská ruleta 

Extension Interface II

Extension Interface – ukázka

Varianty a použití vzoru Extension Interface I Jak identifikovat rozhraní? Int, Guid, deskriptor typu – class, Type? Zavedení rozhraní pro každou roli třídy Jak signalizovat klientovi, že požadované rozhraní není dostupné? Použití abstraktní továrny k vytvoření instance

Varianty a použití vzoru Extension Interface II Vhodné je opět použití generických metod Implementace rozhraní v různých třídách Komplikované a neintuitivní API? Je jediným kritériem pro zavedení samostatného rozhraní množství metod v rozhraní? Kvantita se nemění samovolně v kvalitu, kupodivu ani redukce počtu metod nevede vždy ke kvalitnímu rozhraní. Učebnicovým příkladem může být (programátory často nenáviděný ) COM

Special Case Nebaví Vás testy objektů na null? Mě ani trochu Jestliže pracujeme s atypickým výskytem objektu (null objekt, neznámý produkt atd), můžeme vytvořit samostatnou třídu reprezentující speciální případ  zpřehlednění kódu. Naše aplikace odesílá notifikace přes SMS, Email atd. => máme zákazníka, který o notifikace nemá zájem Jedinou prací „null“ náhrady je “dolce far niente“ 

Charakteristiky vzoru „Special Case“ Varianta „Exceptional Value“ objekt Jediná instance (Singleton) reprezentující všechny „null“ výskyty instancí z dané třídy. Typicky imutabilní Bezstavové

Special Case - nevýhody Tendence prorůstat celým systémem => zavádění „null“ náhrad i u dalších (asociovaných, odvozených) tříd. Chyby se dají zavléct i do triviálního kódu null objektu. Smyslupná reprezentace null objektu? Konstanty, prázdné řetězce? Special Case NENÍ A NESMÍ BÝTnáhradou za povinné asociace (agregace, kompozice)

Interceptor Interceptor řeší situaci, kdy chceme nabídnout aplikaci, kterou mohou třetí strany rozšiřovat o další služby, ale my si chceme ponechat úplnou kontrolu nad klíčovými aspekty všech procesů (např. nad autentizací uživatelů) Z naší aplikace publikujeme klíčové události, které zachytí dispatcher a přepošle je zaregistrovaným interceptorům (pořadí vyvolání interceptorů se může řídit např. jejich prioritou) Aplikace zohlední změny požadované interceptory.

Poznámky ke vzoru Interceptor Návrh rozhraní interceptora? Jednoúčelové metody? Univerzální metody? Evoluce rozhraní interceptora Sledování probíhajících procesů v aplikaci Nezatěžujeme vývojáře interceptorů zbytečnou znalostí „vnitřností“ aplikace. Některé rysy interceptoru můžeme najít u vzorů „Template methods“ a „Chain Of Responsibility“ „Open-Closed“ princip.

René Stein Senior Software Architect .Net Development, Mobile Development - managed(business applications)/native (drivers, services/navigation software) rene@renestein.net http://blog.renestein.net