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

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

Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek.

Podobné prezentace


Prezentace na téma: "Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek."— Transkript prezentace:

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


Stáhnout ppt "Lazy load Použity informace z knihy Patterns of Enterprise Application Architecture od M. Fowlera Jan Sládek."

Podobné prezentace


Reklamy Google