Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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

Podobné prezentace


Prezentace na téma: "Použití návrhových vzorů v prostředí jazyka C# .NET"— Transkript prezentace:

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

2 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 EAA 20:00 – Diskuse: postřehy z praxe

3 1. část Návrhové vzory GoF

4 „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

5 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

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

7 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

8 Vzájemné vztahy vzorů GoF

9 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

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

11 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

12 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.

13 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)

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

15 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

16 Zachycení výrazu – Composite

17 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í

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

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

20 Výpočet výrazu – Interpreter

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

22 Tvorba kontextu – Builder

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

24 Napojení na UI - Command

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

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

27 Rok 2005: 10. výročí vzorů GoF Zdroj:

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

29 2. část Návrhové vzory EAA

30 O vzorech EAA hlavním autorem Martin Fowler
převážně architektonické a návrhové vzory „na míru“ podnikovým aplikacím a jejim potřebám

31 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:

32 Rozšíření ukázkové aplikace
Máme aplikaci, která umožňuje 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 Rozšiřme aplikaci tak, aby umožňovala uložení zadaného algebraického výrazu a hodnot proměnných pro další spuštění aplikace snadnou změnu konkrétní implementace funkčnosti aplikace z jednoho místa v kódu

33 Vzory EAA v praktické ukázce
Repository – hlavní přístupový bod k mechanismu persistence výrazů a hodnot proměnných Dependency Injection – výměna implementace mechanismu persistence Domain Model – třídy reprezentující prvky výrazu a hodnoty proměnných Adapter (GoF) – doplňková funkčnost k mechanismu persistence výrazů

34 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

35 Praktická ukázka (1/1) Uložení zadaného algebraického výrazu a hodnot proměnných pro další spuštění aplikace třída Repository rozhraní IRepositoryProvider třída SimpleRepositoryProvider Změna konkrétní implementace funkčnosti z jednoho místa v kódu třída ServiceLocator

36 Zdroje http://sourcemaking.com/

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


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

Podobné prezentace


Reklamy Google