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

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

thesoysi
thesoysi . @thesoysi
Follow
344 views
Uploaded On 2020-08-28

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

Bc Michal Jakubec MCSE MCSD MCDBA MCTS httpwwwjakubeccz 1 Agenda 1700 až 1710 Představení WUGu 1710 až 1830 Návrhové vzory GoF 1830 až 1845 Přestávka a občerstvení ID: 810103

instance singleton static private singleton instance private static object razu patterns vrhov

Share:

Link:

Embed:

Download Presentation from below link

Download The PPT/PDF document "Použití návrhových vzorů v prostře..." is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

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

Bc. Michal JakubecMCSE, MCSD, MCDBA, MCTShttp://www.jakubec.cz/

1

Slide2

Agenda

17:00 až 17:10 – Představení WUGu17: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

2

Slide3

N

ávrhové vzory

GoF

1. část

3

Slide4

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

4

Slide5

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é schopnostiUsnadň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)5

Slide6

Jak začít s návrhovými vzory?

Pořiďte si knihu GoF a mějte ji po ruceSeznamte se s UML

Připravte si tužku

a

papírpozději postačí propiska

Diskutujte o vzorech a svých návrzích s kolegy

Mějte

odhodlání

a pevnou vůliabstrakci se člověk učí celý život6

Slide7

Klasifikace vzorů GoF

7

Úč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

Slide8

Vzájemné vztahy vzorů GoF

8

Slide9

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

9

Slide10

Vzory GoF

v praktické ukázceComposite (Skladba)Builder

(Stavitel)

Interpreter

(Interpret)Command (Příkaz)

…možná naleznete nějaké další

10

Slide11

Podoba uživatelského rozhraní

11

Kalkulátor

algebraických výrazů

a - (b + c)

Výraz:

a = 12,

b = 3, c = 5

Proměnné:

4

Výsledek:

Zavřít

Vy

počítat

X

Smazat

http://

www.infoq.com/presentations/Modeling-the-User-Interface

Slide12

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.

12

Slide13

Příklady vyhovující gramatice

36a + b12 + c5 + a * 9 + b – c5 +

(a

*

9) + b – c

(

abc

+

xyz) / opq(24 + (b * 3)) / (a – 2)13

Slide14

Zachycení hodnot proměnných

Kolekce typu klíč-hodnota

14

Název

proměnné (klíč kolekce)

Hodnota proměnné

a

26

b

38

Slide15

Zachycení výrazu v paměti

(24 + (b * 3))

/

(a – 2

)

15

/

+

-

24

*

b

3

2

a

Kořen

Binární

strom

Konstanta

Binární výraz

Proměnná

Slide16

Vzor Composite

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

16

Slide17

Zachycení výrazu

– Composite17

Slide18

Praktická ukázka (1/5)

Implementace zachycení výrazurozhraní 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

Slide19

Vzor Builder

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

19

Slide20

Tvorba stromu výrazu –

Builder20

+ 1 2

1 + 2

1 2 +

Slide21

Praktická ukázka (2/5)

Implementace tvorby stromu výrazurozhraní IExpressionBuilder

třída

ExpressionParser

třída InfixExpressionBuilder

21

Slide22

Vzor Interpreter

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

22

Slide23

Výpočet výrazu –

Interpreter23

Slide24

Praktická ukázka (3/5)

Implementace výpočtu výrazurozhraní IContext

metoda

IExpression.Evaluate

(IContext)

třída

DictionaryContext

24

Slide25

Tvorba kontextu – Builder

25

Slide26

Praktická ukázka (4/5)

Implementace tvorby kontexturozhraní IContextBuilder

třída

ContextParser

třída DictionaryContextBuilder

26

Slide27

Vzor Command

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

27

Slide28

Napojení na UI - Command

28

Slide29

Praktická ukázka (5/5)

Implementace napojení na UIrozhraní ICommand

třída

CalculationCommand

deklarace atributu typu ICommand

vytvoření instance

CalculationCommand

29

Slide30

Shrnutí

Vzor Composite (Skladba)zachycení struktury algebraického výrazuVzor 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?30

Slide31

Trochu historie…

Christopher Alexander:A

Pattern

Language, 1977Kent Beck, Ward

Cunningham:

Using

Pattern Languages for Object-Oriented Programs, OOPSLA, 1987GoF: Design Patterns, OOPSLA, 199431

Slide32

GoF: Gang

of Four

Ralph

Johnson, Erich

Gamma,Richard Helm, John

Vlissides

32

Slide33

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

33

Zdroj: http://laputan.org/

Slide34

Přestávka

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

34

Slide35

Návrhové vzory

v praxi3. část

35

Slide36

Typické problémy ze života

Decorator vs. ProxyMediator vs.

Observer

Visitor

vs. Interpreter

Singleton

v různých podobách

36

Slide37

Decorator vs. Proxy

Decoratorskládá funkčnost

objektů

zachovává rozhraní

Proxyupravuje

funkčnost

objektu

zachovává

rozhraní37

Slide38

Mediator vs.

ObserverMediatorfixní vztahy

(většinou

)

Observer

variabilní

vztahy

(většinou)

38

Otázka: Najdete v těchto diagramech syntaktickou chybu?

Slide39

Visitor vs.

InterpreterVisitorvisitor

se při

průchodu mění

Interpreter

kontext se při

průchodu nemění

39

Slide40

Singleton v různých podobách

veřejný statický atribut

internal sealed class

Singleton

{

public static readonly Singleton Instance = new Singleton();

private Singleton() { ... }

}

40

Slide41

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

{ ... }

}

41

Slide42

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

{ ... }

}

42

Slide43

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

{ ... }

}

43

Slide44

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

{ ... }

}

44

Slide45

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)

{

if (instance == null)

instance = new Singleton

();

}

}

return instance

;

}

}

private Singleton() { ... }

}

45

Slide46

O vzorech EAA

hlavním autorem Martin Fowlerhttp://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í

46

Slide47

Přehled vzorů EAA

Domain Logic Patterns

Transaction

Script

(110), Domain Model (116),

Table Module

(125),

Service Layer

(133).Data Source Architectural PatternsTable 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)47

Zdroj: http://martinfowler.com/eaaCatalog/

Slide48

Praktická ukázka (1/2)

Domain Model – třídy reprezentující prvky výrazu a hodnoty proměnnýchRepository – hlavní přístupový bod k mechanismu persistence výrazů a hodnot proměnných

48

Slide49

Princip Inversion of Control (IoC)

49

Slide50

Dependency Injection

Tři základní metody „kontejnerové“ injekcepomocí 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

50

Slide51

Praktická ukázka (2/2)

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

51

Slide52

Zdroje

http://sourcemaking.com/http://martinfowler.com/eaaCatalog/index.html

http

://

martinfowler.com/articles/injection.html

52

Slide53

Závěr:

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

53