Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz



Podobné dokumenty
Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Návrhové vzory OMO, LS 2014/2015

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Návrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace

8.2 Používání a tvorba databází

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

Použití databází na Webu

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

MVVM pro desktop i web

Nové jazykové brány do Caché. Daniel Kutáč

Literatura. E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995

Úvod do Entity Frameworku

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Jak na IoC/DI kontejnery

CineStar Černý Most Praha

RESTful API TAMZ 1. Cvičení 11

Vazba (volná, těsná) - míra znalosti jedné třídy*komponenty o druhé.

Stručný obsah. K2118.indd :15:27

Návrhový vzor Factory v JAVA API

Základy datových vazeb Silverlightu. Funkce Silverlightu 2. Podpora jazyků a technologie.net Framework

DATABÁZOVÉ SYSTÉMY. Metodický list č. 1

Zpracoval:

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

MVC (Model-View-Controller)

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Michal Krátký, Miroslav Beneš

Tvorba informačních systémů

Databázové a informační systémy

Návrhové vzory pro J2EE. Miroslav Beneš

Business Intelligence

Stěhování aplikací. Michal Tomek, Sales Manager

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Návrhové vzory pro J2EE

Oracle XML DB. Tomáš Nykodým

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

ČESKÉ VYSOKÉ UČENÍ TECHNIKÉ Fakulta elektrotechnická. Microsoft Sharepoint 2007 Workflows Průmyslové informační systémy

Marketingová komunikace. 2. a 3. soustředění. Mgr. Pavel Vávra 9103@mail.vsfs.cz. Kombinované studium Skupina N9KMK3PH (vm3aph)

Marketingová komunikace. 2. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK1aPH/N9KMK1bPH (um1a1ph/um1b1ph)

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

Základy databází. O autorech 17 PRVNÍ ČÁST. KAPITOLA 1 Začínáme 19

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

Principy OOP při tvorbě aplikací v JEE. Michal Čejchan

Design systému. Komponentová versus procesní architektura

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Databázové patterny. MI-DSP 2013/14 RNDr. Ondřej Zýka,

Úvod do databázových systémů

Kód, který se nebude často měnit

Metody tvorby ontologií a sémantický web. Martin Malčík, Rostislav Miarka

Návrhové vzory Design Patterns

Vývoj informačních systémů. Přehled témat a úkolů

Vladimír

Analýza a Návrh. Analýza

Databáze II. 1. přednáška. Helena Palovská

Semináˇr Java X J2EE Semináˇr Java X p.1/23

O Apache Derby detailněji. Hynek Mlnařík

C# &.NET. Cvičení Mgr. Filip Krijt.

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Vývoj informačních systémů. Přehled témat a úkolů

SQL - trigger, Databázové modelování

Úvod do databázových systémů. Ing. Jan Šudřich

Transakce a zamykání. Administrace MS SQL Serveru (NDBI039) Pavel Hryzlík

Maturitní témata Školní rok: 2015/2016

Architektury informačních systémů

Architektura softwarových systémů

Ukládání a vyhledávání XML dat

KAPITOLA 3. Architektura aplikací na frameworku Rails. V této kapitole: modely, pohledy, řadiče.

Vzor OBSERVER a jeho zajímavá varianta v kombinaci se vzorem ADAPTER Část 2

Jazyk C# - přístup k datům

Administrace Oracle. Práva a role, audit

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Vhodnost nasazení jednotlivých webových architektur, sdílení dat, perzistence, webové služby a REST, asynchronnost, messaging

NOVÁ STROMOVÁ STRUKTURA VE VÝROBĚ

Objektově orientované databáze. Miroslav Beneš

6 Objektově-orientovaný vývoj programového vybavení

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Marketingová komunikace. 3. soustředění. Mgr. Pavel Vávra Kombinované studium Skupina N9KMK3PH (vm3bph)

KIV/ZIS cvičení 5. Tomáš Potužák

Informační systém pro podporu řízení, správu a zjišťování aktuálního stavu rozvrhované výuky

FRED & PostgreSQL. CZ.NIC, z.s.p.o. Jaromír Talíř <jaromir.talir@nic.cz>

Student s Life. Návrhová dokumentace (Design) Lukáš Barák, Jakub Ječmínek, Jaroslav Brchel, Jiří Zmeškal

Databázové systémy. Cvičení 6: SQL

Statistica Enterprise

Základy objektové orientace I. Únor 2010

Univerzita Palackého v Olomouci Radek Janoštík (Univerzita Palackého v Olomouci) Základy programování 4 - C# 10.4.

Výčtový typ strana 67

Softwarové komponenty a Internet

Tvorba informačních systémů

Zpětná vazba od čtenářů 11 Dotazy 11 Zdrojové kódy ke knize 11 Errata 11 Typografické konvence použité v knize 12

Architektury informačních systémů

C# - Databáze úvod, ADO.NET. Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí

KMI / TMA Tvorba mobilních aplikací. 9. seminář ZS 2016/2017 Středa 13:15-15:45

Programování v jazyku C# II. 5.kapitola

Text úlohy. Systémový katalog (DICTIONARY):

Microsoft Sync Framework. Jiří Činčura blog.cincura.net

Popis vývoje perzistentního frameworku QuickPersistor v jakyzu C-Sharp

Transkript:

Design Patterns Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz

Základní návrhové vzory Kategorie Creational Patterns starají se o vytváření instancí Structural Patterns struktura komponent v systému, rozčlenění Behavioral Patterns samotné chování systému komunikace a interakce mezi objekty

Creational Patterns Factory Abstract Factory Prototype Singleton

Factory Metoda, která na základě nějakých pravidel vrací instance třídy T nebo jejích potomků konkrétní typ není "natvrdo" v kódu např. třída DataAccessFactory metoda Create podle konfigurace vrátí buď instanci třídy PlainTextFileDataAccess SqlDataAccess všechny dědí ze třídy DataAccess

Abstract Factory Chceme vytvářet rodiny "podobných" objektů opět nemáme konkrétní typy přímo v kódu

Prototype Prototyp předpřipravený inicializovaný objekt metoda Clone() vytvoří kopii objektu podle daného prototypu V.NETu rozhraní ICloneable

Singleton "anti-pattern" zaručuje, že v aplikaci bude nejvýše 1 instance dané třídy statická metoda GetInstance vytvoří instanci nebo vrátí již vytvořenou problémy obtížná testovatelnost nelze rozumně mockovat

Singleton "anti-pattern" zaručuje, že v aplikaci bude nejvýše 1 instance dané třídy statická metoda GetInstance vytvoří instanci nebo vrátí již vytvořenou problémy obtížná testovatelnost nelze rozumně mockovat

Structural Patterns Adapter Bridge Composite Decorator Facade Proxy

Adapter někdy též Wrapper převedení jednoho rozhraní na jiné znovupoužitelnost jedna třída "obsluhuje "několik rozhraním kdykoliv je možné doplnit další bez zásahu do samotné třídy zpětná kompatibilita

Decorator dynamické přidávání dodatečné funkcionality konkrétním objektům na místech, kde podědění třídy a přidání funkce není praktické nemáme vícenásobnou dědičnost

Decorator

Composite hierarchie, každý uzel má stejné rozhraní např. strom komponent ve formuláři např. reprezentace aritmetických výrazů

Façade "Vytažení" některých funkcí ze složitější struktury objektů do nového rozhraní

Flyweight Obrovské množství objektů Několika málo typů Na identitě objektu nesejde, důležitý je typ Stav objektů je definován mimo ně Dají se znovupoužívat Flyweight mechanismus pro sdílení instancí

Flyweight

Proxy Abstrakce nad vzdálenými objekty Odložení dlouhotrvajících operací až na chvíli, kdy jsou potřeba Kontrola přístupu k objektu Varianty remote proxy: například Web Services virtual proxy: odložení dlouhotrvajících operací protection proxy: řízení přístupu k objektu

Proxy

Behavioral Patterns Chain of Responsibility Command Iterator Observer Strategy Visitor

Chain of Responsibility Řetěz objektů se stejným rozhraním Pokud první objekt nedokáže obsloužit požadavek, předá jej druhému atd.

Command Volání metod nebo provádění operací se zabalí do objektů usnadňuje asynchronní zpracování implementace undo řazení požadavků do fronty atd.

Command

Iterator Mechanismus pro procházení kolekcí, polí, sekvencí atd. Kolekce nemusí být celá uložená v paměti, ale může se generovat "on demand" V.NETu IEnumerable trochu jiné rozhraní, ale funkce podobná

Iterator

Observer Události Notifikace o změnách objektu

Strategy výběr implementace v závislosti na kontextu

Visitor rozšíření možností hierarchie zvenčí typicky u stromové struktury

Enterprise vzory

Domain Model Business data a business operace reprezentována pomocí objektů a jejich metod Nemusí být 1:1 se schématem databáze Ani by neměl být Návrh aplikace by měl začít právě návrhem domain modelu Praxe je často jiná Alternativy Data v SQL databázi, práce s nimi např. přes stored procedury, v aplikaci není nutná třída pro reprezentaci záznamu z databáze, používá se např. DataSet, DataTable Dnes již překonané

Data Mapper Mapování dat ze SQL databáze (případně jiné) na objekty doménového modelu Typicky řeší i vazby mezi tabulkami Lazy loading, eager loading Dědičnost Table per class Table per type Table per hierarchy ORM je implementací Data Mapperu a dalších vzorů

Identity Map Řeší konkurenční přístup k datům v rámci jedné transakce Např. načteme řádek z tabulky Order s Id=1 Upravíme na něm nějakou vlastnost Řádek načteme znovu (třeba jako součást jiného dotazu) Která verze platí? Identity Map v rámci každé transakce eviduje všechny entity (podle primárního klíče) Pokud již entita existuje, není materializována znovu, ale použije se existující instance

Unit of Work Ohraničuje business transakci Typicky propojená s Identity Map Eviduje změněné objekty a umožňuje promítnout jejich změny do datového úložiště Řeší i pořadí updatů Často používá IDisposable a vzor Registry Vytvoření instance zaregistruje Unit of Work do aktuálního vlákna Podpora vnořování UOW použijeme Stack Dispose Unit of Work odregistruje

Repository Umožňuje CRUD operace nad kolekcí objektů Např. databázovou tabulkou Add, Update, Delete, FindById Někdo umožňuje i vracení IQueryable V praxi není úplně vhodné Svádí to k psaní složitých dotazů přímo přes repozitář Jednoduché dotazy se v aplikaci často opakují Lepší je použít Query objekt

Query Object Dotaz nad daty reprezentován pomocí třídy Metoda Execute Další možnosti Parametrizovatelnost dotazů Obecná podpora stránkování, řazení, filtrování Možnost přidat např. metodu GetTotalCount Post-processing výsledků

Příklad architektury UI MVC MVVM... UI fasády Business Layer Repository Query Entity Framework Data Access Layer

Data Access Layer Entity Framework EDMX model Datové entity Rozhraní IEntity<TKey> Povinná vlastnost Id

Business Layer Repozitáře GetById Insert Update Delete Žádné složité dotazy Query objekty Stránkování Řazení Filtrování Jediná možnost, jak se dotazovat databáze na více hodnot Vrací Data Transfer Objekty

Business Layer Fasády Třídy s metodami připravenými pro uživatelské rozhraní Vrací DTO, přijímají DTO Vyhazují výjimky (ty ošetří UI), kontrolují oprávnění Připraveny být vystaveny jako web service Nezávislé na prezentační vrstvě Unit Of Work Ohraničuje business transakci Poskytuje abstrakci nad Entity Frameworkem Repozitáře a Queries jej používají pro komunikaci s DB

Business Layer Business objekty Pro složitější entity (např. objednávka včetně položek, dodavatelů a všech přidružených dat) Create vytvoří a zinicializuje nový Load načte objekt z databáze Save zpropaguje změny do databáze (přidání položek, vyhození položek, změna dodavatele atd.) Další metody pro příslušné procesy Identity Map Zabraňuje vzniku více instancí jednoho BO v rámci jedné Unit of Work