Použití návrhových vzorů v prostředí jazyka C# .NET

Slides:



Advertisements
Podobné prezentace
PLAYBOY Kalendar 2007.
Advertisements

PKML.
Použití návrhových vzorů v prostředí jazyka C# .NET
Stodůlky 1977 a 2007 foto Václav Vančura, 1977 foto Jan Vančura, 2007.
Města ČR – orientace na mapě
Zpracování informací a znalostí Další přístupy k vyhledávání textových dokumentů Doc. RNDr. Jan Rauch, CSc. Katedra informačního a znalostního inženýrství.
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
*Zdroj: Průzkum spotřebitelů Komise EU, ukazatel GfK. Ekonomická očekávání v Evropě Březen.
Český Internet po (uši v?) krizi Marek Antoš. snímek |datum |dokument | 1. Internetové prostředí 2.
Student: Ing. Olga Minaříková školitel: doc.akad.soch. Miroslav Zvonek, PhD. srpen 2009.
Téma 3 ODM, analýza prutové soustavy, řešení nosníků
Urči název a zařaď do příslušné skupiny
Dynamické rozvozní úlohy
Násobíme . 4 = = . 4 = = . 4 = = . 2 = 9 .
Zápis čísla v desítkové soustavě
Výzkumy volebních preferencí za ČR a kraje od
NÁSOBENÍ ČÍSLEM 10 ZÁVĚREČNÉ SHRNUTÍ
Téma: SČÍTÁNÍ A ODČÍTÁNÍ CELÝCH ČÍSEL 2
Vizualizace projektu větrného parku Stříbro porovnání variant 13 VTE a menšího parku.
Vzdělávací materiál / DUMVY_32_INOVACE_02B14 Příkazový řádek: obsah souborů PŘÍKLADY AutorIng. Petr Haman Období vytvořeníLeden 2013 Ročník / věková kategorie3.
VY_32_INOVACE_INF_RO_12 Digitální učební materiál
Animace Demo Animace - Úvodní animace 1. celé najednou.
Dělení se zbytkem 3 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
ZÁKLADNÍ ŠKOLA PODBOŘANY, HUSOVA 276, OKRES LOUNY
MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA reg. č.: CZ.1.07/1.4.00/ Základní škola, Šlapanice, okres Brno-venkov, příspěvková organizace Masarykovo nám.
VY_32_INOVACE_ 14_ sčítání a odčítání do 100 (SADA ČÍSLO 5)
Zábavná matematika.
Dělení se zbytkem 6 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
Dělení se zbytkem 5 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
Letokruhy Projekt žáků Střední lesnické školy a střední odborné školy sociální ve Šluknově.
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í.
Jazyk vývojových diagramů

Nejmenší společný násobek
Čtení myšlenek Je to až neuvěřitelné, ale skutečně je to tak. Dokážu číst myšlenky.Pokud mne chceš vyzkoušet – prosím.
Únorové počítání.
Násobení zlomků – teorie a cvičení VY_32_INOVACE_19
52_INOVACE_ZBO2_1364HO Výukový materiál v rámci projektu OPVK 1.5 Peníze středním školám Číslo projektu:CZ.1.07/1.5.00/ Název projektu:Rozvoj vzdělanosti.
Dělení se zbytkem 8 MODERNÍ A KONKURENCESCHOPNÁ ŠKOLA
Zásady pozorování a vyjednávání Soustředění – zaznamenat (podívat se) – udržet (zobrazit) v povědomí – představit si – (opakovat, pokud se nezdaří /doma/)
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
TRUHLÁŘ II.ročník Výrobní zařízení Střední škola stavební Teplice
Lounky PRO Vratimov, o.s. ( 1 Charitativní sbírka Lounky 06/2013.
Cvičná hodnotící prezentace Hodnocení vybraného projektu 1.
DĚLENÍ ČÍSLEM 7 HLAVOLAM DOPLŇOVAČKA PROCVIČOVÁNÍ
Fyzika 2 – ZS_4 OPTIKA.
FRÉZOVÁNÍ DĚLÍCÍM ZPŮSOBEM
MS PowerPoint Příloha - šablony.
Téma: ABSOLUTNÍ HODNOTA CELÝCH ČÍSEL 2
1 Celostátní konference ředitelů gymnázií ČR AŘG ČR P ř e r o v Mezikrajová komparace ekonomiky gymnázií.
Technické kreslení.
E-knihovna pro knihovníky Seminář E-knihy III, NTK,
Úkoly nejen pro holky.
END 1.Přítelem 2.Druhem 3.Milencem 4.Bratrem 5.Otcem 6.Učitelem 7.Vychovatelem 8.Kuchařem 9.Elektrikářem 10.Instalatérem 11.Mechanikem 12.Návrhářem 13.Stylistou.
Přednost početních operací
Modelování odezvy zákazníků v systému SAS Enterprise Miner™ Ukázková úloha pro předmět Získávání znalostí z databází doc. Ing. Jaroslav Zendulka, CSc.
DĚLENÍ ČÍSLEM 5 HLAVOLAM DOPLŇOVAČKA PROCVIČOVÁNÍ Zpracovala: Mgr. Jana Francová, výukový materiál EU-OP VK-III/2 ICT DUM 50.
Dokumentace objektů a zveřejnění funkcí
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
KONTROLNÍ PRÁCE.
Gymnázium, Broumov, Hradební 218
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Porovnání výroby a prodejů vozidel ve světě
Foreign key mapping Jakub Chalupa Naim Ashhab ČVUT FEL
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í.
Petr Puš Software Architect Unicorn a.s. Microsoft C# MVP.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY MVC vs MVP.
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.
C# přehled vlastností.
Dfdfdf.
Transkript prezentace:

Použití návrhových vzorů v prostředí jazyka C# .NET Bc. Michal Jakubec MCSE, MCSD, MCDBA, MCTS http://www.jakubec.cz/

Agenda 17:00 až 17:10 – Představení WUGu 17:10 až 18:30 – Návrhové vzory GoF 18:30 až 18:45 – Přestávka a občerstvení 18:45 až 20:00 – Návrhové vzory v praxi 20:00 – Diskuse: postřehy z praxe

1. část Návrhové vzory GoF

„Obecně použitelné řešení určitého problému v určitém kontextu“ Co je návrhový vzor? Definice „Obecně použitelné řešení určitého problému v určitém kontextu“ Specifikace Název vzoru Popis problému Popis řešení Důsledky použití vzoru, příp. alternativy

K čemu je to dobré? Společný slovník vývojářů a architektů Nemusíte "objevovat kolo" Velice inspirativní pro další profesní rozvoj Rozvíjí návrhové schopnosti Usnadňují řešení návrhových a vývojových problémů (většinou) Vedou k získání tvárnější implementace funkčnosti (většinou)

Jak začít s návrhovými vzory? Pořiďte si knihu GoF a mějte ji po ruce Seznamte se s UML Připravte si tužku a papír později postačí propiska Diskutujte o vzorech a svých návrzích s kolegy Mějte odhodlání a pevnou vůli abstrakci se člověk učí celý život

Klasifikace vzorů GoF Účel  Přístup  Tvorba instancí (Creational) Struktura (Structural) Chování (Behavioral) Třída Factory Method Adapter (C) Interpreter Template Method Instance Abstract Factory Builder Prototype Singleton Adapter (I) Bridge Composite Decorator Façade Flyweight Proxy Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

Vzájemné vztahy vzorů GoF

Zadání ukázkové aplikace Vytvořte aplikaci, která umožní zadání jednoduchého algebraického výrazu s konstantami a proměnnými v textové formě zadání hodnot jednotlivých proměnných ve výrazu vyhodnocení výrazu a zobrazení výsledku

Vzory GoF v praktické ukázce Composite (Skladba) Builder (Stavitel) Interpreter (Interpret) Command (Příkaz) …možná naleznete nějaké další

Podoba uživatelského rozhraní Kalkulátor algebraických výrazů a - (b + c) Výraz: a = 12, b = 3, c = 5 Proměnné: 4 Výsledek: Zavřít Vypočítat X Smazat http://www.infoq.com/presentations/Modeling-the-User-Interface

Gramatika platných výrazů Zápis v Backusově-Naurově formě (BNF): <expr> ::= <number> | <var> | <expr> <oper> <expr> | "(" <expr> ")" <oper> ::= '+' | '-' | '*' | '/' <number> ::= <digit> | <digit> <number> <digit> ::= "0" | "1" | "2" | … | "9" <var> ::= <letter> | <letter> <var> <letter> ::= "a" | "b" | "c" | ... | "z" Možný výskyt bílých znaků (mezery, tabulátory, apod.) v definici pro přehlednost neuvádím.

Příklady vyhovující gramatice 36 a + b 12 + c 5 + a * 9 + b – c 5 + (a * 9) + b – c (abc + xyz) / opq (24 + (b * 3)) / (a – 2)

Zachycení hodnot proměnných Kolekce typu klíč-hodnota Název proměnné (klíč kolekce) Hodnota proměnné a 26 b 38 …

Zachycení výrazu v paměti (24 + (b * 3)) / (a – 2) Binární strom Binární výraz / Kořen + - Konstanta 24 * a 2 Proměnná b 3

Vzor Composite (Skladba) skládáním jednoduchých objektů získáme funkční celek

Zachycení výrazu – Composite

Praktická ukázka (1/5) Implementace zachycení výrazu rozhraní IExpression třída ConstantExpression třída VariableExpression třída BinaryExpression Doplnění překrytí metody ToString() umožní zobrazení textové podoby výrazu – užitečné pro ladění

Vzor Builder (Stavitel) Odděluje konstrukci složeného objektu od jeho reprezentace

Tvorba stromu výrazu – Builder + 1 2 1 + 2 1 2 +

Praktická ukázka (2/5) Implementace tvorby stromu výrazu rozhraní IExpressionBuilder třída ExpressionParser třída InfixExpressionBuilder

Vzor Interpreter (Interpret) Definuje reprezentaci gramatiky a způsob jejího vyhodnocení (interpretace)

Výpočet výrazu – Interpreter

Praktická ukázka (3/5) Implementace výpočtu výrazu rozhraní IContext metoda IExpression.Evaluate(IContext) třída DictionaryContext

Tvorba kontextu – Builder

Praktická ukázka (4/5) Implementace tvorby kontextu rozhraní IContextBuilder třída ContextParser třída DictionaryContextBuilder

Vzor Command (Příkaz) Zapouzdří operaci tak, aby bylo možné ji předávat a užívat různými subjekty

Napojení na UI - Command

Praktická ukázka (5/5) Implementace napojení na UI rozhraní ICommand třída CalculationCommand deklarace atributu typu ICommand vytvoření instance CalculationCommand

Shrnutí Vzor Composite (Skladba) Vzor Builder (Stavitel) zachycení struktury algebraického výrazu Vzor Builder (Stavitel) tvorba stromu výrazu z jeho textové podoby tvorba kontextu z jeho textové podoby Vzor Interpreter (Interpret) výpočet hodnoty výrazu dle kontextu Vzor Command (Příkaz) napojení na UI … nějaké další vzory?

Trochu historie… Christopher Alexander: A Pattern Language, 1977 Kent Beck, Ward Cunningham: Using Pattern Languages for Object-Oriented Programs, OOPSLA, 1987 GoF: Design Patterns, OOPSLA, 1994

GoF: Gang of Four Ralph Johnson, Erich Gamma, Richard Helm, John Vlissides 

Rok 2005: 10. výročí vzorů GoF Zdroj: http://laputan.org/

Občerstvení, názory, připomínky, otázky, odpovědi… Přestávka

3. část Návrhové vzory v praxi

Typické problémy ze života Decorator vs. Proxy Mediator vs. Observer Visitor vs. Interpreter Singleton v různých podobách

Decorator vs. Proxy Decorator Proxy skládá funkčnost objektů zachovává rozhraní Proxy upravuje funkčnost objektu

Mediator vs. Observer Mediator Observer fixní vztahy (většinou) variabilní vztahy (většinou) Otázka: Najdete v těchto diagramech syntaktickou chybu?

Visitor vs. Interpreter visitor se při průchodu mění Interpreter kontext se při průchodu nemění

Singleton v různých podobách veřejný statický atribut internal sealed class Singleton { public static readonly Singleton Instance = new Singleton(); private Singleton() { ... } }

Singleton v různých podobách veřejná statická vlastnost internal sealed class Singleton { private static readonly Singleton instance = new Singleton(); public static Singleton Instance get return instance; } private Singleton() { ... }

Singleton v různých podobách veřejná statická vlastnost jako proxy internal sealed class Singleton { private static Singleton instance; public static Singleton Instance get if (instance == null) instance = new Singleton(); return instance; } private Singleton() { ... }

Singleton v různých podobách synchronizace vícevláknového přístupu (jde to lépe?) internal sealed class Singleton { private static volatile Singleton instance; public static Singleton Instance get lock(typeof(Singleton)) if (instance == null) instance = new Singleton(); return instance; } private Singleton() { ... }

Singleton v různých podobách synchronizace vícevláknového přístupu (lepší varianta) internal sealed class Singleton { private static object syncRoot = new object(); private static volatile Singleton instance; public static Singleton Instance get lock(syncRoot) if (instance == null) instance = new Singleton(); return instance; } private Singleton() { ... }

Singleton v různých podobách double-checked locking optimization internal sealed class Singleton { private static object syncRoot = new object(); private static volatile Singleton instance; public static Singleton Instance get if (instance == null) lock(syncRoot) instance = new Singleton(); } return instance; private Singleton() { ... }

O vzorech EAA hlavním autorem Martin Fowler http://www.martinfowler.com zejména architektonické a návrhové vzory vzory připraveny na základě bohatých zkušeností autora z tvorby business aplikací

Přehled vzorů EAA Zdroj: http://martinfowler.com/eaaCatalog/ Domain Logic Patterns Transaction Script (110), Domain Model (116), Table Module (125), Service Layer (133). Data Source Architectural Patterns Table Data Gateway (144), Row Data Gateway (152), Active Record (160), Data Mapper (165). Object-Relational Behavioral Patterns: Unit of Work (184), Identity Map (195), Lazy Load (200) Object-Relational Structural Patterns: Identity Field (216), Foreign Key Mapping (236), Association Table Mapping (248), Dependent Mapping (262), Embedded Value (268), Serialized LOB (272), Single Table Inheritance (278), Class Table Inheritance (285), Concrete Table Inheritance (293), Inheritance Mappers (302). Object-Relational Metadata Mapping Patterns: Metadata Mapping (306), Query Object (316), Repository (322). Web Presentation Patterns: Model View Controller (330), Page Controller (333), Front Controller (344), Template View (350), Transform View (361), Two-Step View (365), Application Controller (379). Distribution Patterns: Remote Facade (388), Data Transfer Object (401) Offline Concurrency Patterns: Optimistic Offline Lock (416), Pessimistic Offline Lock (426), Coarse Grained Lock (438), Implicit Lock (449). Session State Patterns: Client Session State (456), Server Session State (458), Database Session State (462). Base Patterns: Gateway (466), Mapper (473), Layer Supertype (475), Separated Interface (476), Registry (480), Value Object (486), Money (488), Special Case (496), Plugin (499), Service Stub (504), Record Set (508) Zdroj: http://martinfowler.com/eaaCatalog/

Praktická ukázka (1/2) Domain Model – třídy reprezentující prvky výrazu a hodnoty proměnných Repository – hlavní přístupový bod k mechanismu persistence výrazů a hodnot proměnných

Princip Inversion of Control (IoC)

Dependency Injection Tři základní metody „kontejnerové“ injekce pomocí konstruktorů pomocí setterů pomocí „injekčních“ rozhraní Alternativa pomocí EAA vzoru Registry statické rozhraní – „pevné“ metody vrací produkt dynamické rozhraní – produkt získáván z kolekce či pomocí reflexe

Praktická ukázka (2/2) Dependency Injection – výměna implementace mechanismu persistence Adapter (GoF) – doplňková funkčnost k mechanismu persistence výrazů

Zdroje http://sourcemaking.com/ http://martinfowler.com/eaaCatalog/index.html http://martinfowler.com/articles/injection.html

Diskuse: názory, připomínky, otázky, odpovědi Závěr: