Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilJaroslava Šimková
1
Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek
2
Motivace Všichni to známe... Lazy load
Zdroj: Všichni to známe... Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
3
Motivace Příklad: Seznam objednávek - načteme pouze nutné minimum
Lazy load - načteme pouze nutné minimum - ale víme, kam sáhnout pro doplňující data Příklad: Seznam objednávek Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
4
Motivace Příklad: Seznam objednávek - objednávka může obsahovat
Lazy load Příklad: Seznam objednávek - objednávka může obsahovat cenu, jméno zákazníka, odkaz na další objednávky zákazníka náhledy produktů v objednávce ... Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
5
Motivace Příklad: Seznam objednávek
Lazy load Příklad: Seznam objednávek - opravdu budeme to vše předem stahovat / načítat z databáze? - raději si jen připravíme přístupové metody a vyčkáváme – třeba nic z toho nebudeme potřebovat Zdroj: Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
6
Myšlenka Příklad: Seznam objednávek
Lazy load Příklad: Seznam objednávek Pokud pracujeme s objektem, jsme líní - nestahujeme hned vše, co s ním souvisí Pro informace si sáhneme až v případě, kdy je potřebujeme (např. zobrazit?) Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
7
Myšlenka Příklad: Seznam objednávek Lazy load
Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
8
Lazy initialization (nejjednodušší) Virtual proxy Value holder Ghost
O vzoru Lazy load Existují 4 typy lazy load: Lazy initialization (nejjednodušší) Virtual proxy Value holder Ghost Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
9
Je prvek NULL? Načteme ho Jinak ho vrátíme
Typy vzoru Lazy load 1) Lazy initialization Je prvek NULL? Načteme ho Jinak ho vrátíme Co se může pokazit? Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
10
Problém 1: NULL je povolená hodnota v databázi
Typy vzoru Lazy load 1) Lazy initialization Problém 1: NULL je povolená hodnota v databázi Je prvek opravdu nenačten? Nebo jsme ho načetli, a je prázdný? Řešení Special Case (Null Object) + Flyweight MissingOrder, UnknownOrder... Source: Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
11
Typy vzoru Lazy initialization Problém 2 Lazy load Jan Sládek
Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
12
Typy vzoru Lazy initialization Problém 2 Lazy load Jan Sládek
Architektury Softwarových Systémů, FEL ČVUT
13
Problém 2: Zapomeneme použít getter
Typy vzoru Lazy load 1) Lazy initialization Problém 2: Zapomeneme použít getter Pokud nepoužijeme getter, ale přímo atribut třídy, inicializace neproběhne Řešení Pro vnější přístup – zapouzdření Pro vnitřní přístup ? Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
14
Je prvek příliš složitý? Vytvoříme pro něj kostru/náhled
Typy vzoru Lazy load 2) Virtual proxy Je prvek příliš složitý? Vytvoříme pro něj kostru/náhled Co se může pokazit? Source: Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
15
Problém: Dvojí identita téhož objektu
Typy vzoru Lazy load 2) Virtual proxy Problém: Dvojí identita téhož objektu Virtual proxy se sice chová jako zastupovaný objekt, ale má jiný hashcode Pro jeden objekt může dokonce existovat více proxy! Řešení Překrýt metodu equals() - nutné minimum Neporovnávat pomocí == Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
16
Typy vzoru 3) Value holder
Lazy load 3) Value holder Pro každou informaci si sáhneme pouze jednou Uložíme je do zvláštního objektu Jaké to přináší problémy? Source: Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
17
Problém: Ztráta silné typovosti
Typy vzoru Lazy load 3) Value holder Problém: Ztráta silné typovosti Pokud vytvoříme univerzální holder, pracujeme uvnitř něj s generickými parametry, nikoli přímo s typy Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
18
Typy vzoru 4) Ghost Lazy load Po načtení z DB má objekt pouze ID
Ostatní atributy se načtou až když k nim přistoupíme ID: 1051 Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
19
Typy vzoru 4) Ghost Lazy load Vychází z:
Lazy inicializace – vše kromě ID je lazy inicializováno (najednou) Virtual proxy – objekt je svým vlastním proxy Vychází z: Lazy inicializace – vše kromě ID je lazy inicializováno (najednou) Virtual proxy – objekt je svým vlastním proxy Rozšíření: Light object Pokud má objekt další často používané atributy (např. název), načteme je společně s ID – vznikne Light object Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
20
Typy vzoru 4) Ghost – implementace (Data Mapper) Lazy load
Zdroj: Patterns of Enterprise Applications Architecture, M. Fowler Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
21
Typy vzoru 4) Ghost – implementace (Data Mapper) Lazy load
Zdroj: Patterns of Enterprise Applications Architecture, M. Fowler Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
22
Na co si dát pozor Na co si dát pozor u Lazy load Ripple loading
Prohlížíme lazy loaded objekty po jednom – každé zobrazení pak znamená zvláštní dotaz do databáze Bez lazy loadu bychom načetli všechny objekty „jednou ranou“, pokud nejsou přílíš rozsáhlé - a při zobrazení uživatel nečeká - může být výhodnější Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
23
Doplnění k Lazy load Identity table Výhody:
Uložíme si všechna ID určité sady objektů do hashovací tabulky Při dotazu na tuto sadu: - projdeme tabulku - načteme objekty na základě ID - sestavíme a vrátíme kolekci Výhody: - objekty budou vždy aktuální - ušetříme dotaz na databázi pro získání sady Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
24
Související vzory Související vzory Lazy load Singleton Data Mapper
Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
25
Příklad implementace – Value holder
Lazy load 1) Bez lazy loadu Provede se vždy Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
26
Příklad implementace – Value holder
Lazy load 2) S lazy loadem Provede se pouze napoprvé Architektury Softwarových Systémů, FEL ČVUT Jan Sládek
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.