Technologie workflow
Obsah přednášky z
Návrhové vzory pro J2EE
z z
Miroslav Beneš
z z z z
Význam návrhových vzorů Klasické návrhové vzory GoF Návrh prezentační vrstvy Business vrstva Vzory pro práci s daty Příklady dalších vzorů Záporné vzory
Návrhové vzory pro J2EE
Význam návrhových vzorů z
z
z z
Klasické návrhové vzory Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object Oriented Software, Addison-Wesley (Gang of Four, GoF)
Stavební bloky pro konkrétní řešení. z
inspirace mimo počítačový průmysl
Abstrakce technik řešení problémů, které se často opakují Zabraňují objevování již objeveného Zjednodušují komunikaci z
z z z z
role jména návrhového vzoru
z z
Návrhové vzory pro J2EE
2
3
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Factory Command Decorator Composite Façade Value Object
-
akce filtry UI komponenty Integer, Boolean, … Návrhové vzory pro J2EE
4
1
Technologie workflow
Návrh prezentační vrstvy z
Na straně klienta z
z
Model-View-Controller z
(X)HTML, CSS, JS
Model z
z
Na straně serveru
View z
Požadavky z reakce na časté změny v zadání z rozšiřitelnost
z
z z
<<servlet>> Controller
Návrhové vzory pro J2EE
z
<<JavaBean>> Model
MVC nepředepisuje, kolik má být řídicích objektů z
locate update
Jeden pro každou obrazovku z z
z
choose forward()
z
HTTP response
7
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Obtížné změny Zařazení společných funkcí (logging, bezpečnost, …)
Jeden pro celou aplikaci z
useBean
Návrhové vzory pro J2EE
6
Front Controller Pattern
<<JSP page>> View
HTTP request
Zpracování vstupu od uživatele Aktualizace modelu Zobrazení nového pohledu na data
5
Model-View-Controller klient
Interpretace dat z modelu a jejich prezentace uživateli
Controller z
Návrhové vzory pro J2EE
Stav aplikace
Co se specifickými funkcemi?
Řeší se kombinací vzorů Front Controller, Command a Decorator Návrhové vzory pro J2EE
8
2
Technologie workflow
Front Controller Pattern z
z z
Jediné místo v aplikaci, zapouzdřující zpracování požadavku Provedení společných úkolů Přenesení řízení na specifický controller pro konkrétní stránku z z
z
Decorator Pattern z z z z
Samostatné servlety Návrhový vzor Command (akce)
z
Implementace musí být co nejvíce efektivní Návrhové vzory pro J2EE
9
Decorator Pattern Decorator1 uživatel
Kombinace více malých komponent do jednoho celku Třída obalující původní třídu a zachovávající její rozhraní Možnost řetězení dekorátorů Požadována nezávislost – problémy se správným pořadím dekorátorů J2EE: filtry (preprocesing a postprocesing požadavků) Návrhové vzory pro J2EE
Vzory zajišťující efektivitu
Decorator2
z
FrontController
Caching z
Request
Asynchronous Page Pattern z
preprocess() doFilter()
10
preprocess()
z
doFilter()
postprocess()
z
Response
Návrhové vzory pro J2EE
Caching Filter Pattern z
postprocess()
11
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
asynchronní načítání dat z externích zdrojů (např. RSS) Filtr zajišťující úschovu dynamicky generovaných stránek Pozor! Umístit až za filtr zajišťující bezpečnost (neautorizované čtení uschovaných stránek)
Návrhové vzory pro J2EE
12
3
Technologie workflow
Vzory zajišťující efektivitu z
Komponenty business vrstvy
Pooling z
z
Resource Pool Pattern z
z
z
Pool – vytváří (přes Factory), spravuje a řídí přístup ke zdroji Resource – řízený zdroj z
z
Příklad: DB spojení z
z
Jakarta DBCP
z
Návrhové vzory pro J2EE
z
z
z
z
z z
Odstranění závislosti prezentační vrstvy na konkrétním uložení dat Jiná možnost: práce přímo s databází z
z
Mapování každé databázové tabulky na třídu
z
Jeden objekt reprezentuje data z více tabulek
15
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Složitější komunikace, větší režie
Příklad: z
POJO – Plain Old Java Objects – nevyžadují kontejner EJB Návrhové vzory pro J2EE
14
Také Entity Façade Pattern Varianty: z
Technologie z
Návrhové vzory pro J2EE
Composite Entity Pattern
Definice skutečných dat a procesů, které jsou spravovány a implementovány systémem Základní vzor většiny J2EE aplikací z
Často komponenty sdílené více klienty Poskytují rámec pro transakce Poskytují mechanismus pro perzistenci aplikačních dat
13
Domain Object Model Pattern z
Strukturovaný model aplikačních dat Procedury pro přístup k aplikačně orientovaným činnostem
Osoba – kontakty
Návrhové vzory pro J2EE
16
4
Technologie workflow
Vzory pro práci s daty z
Příklad: Osoba a adresa z z
z
Data Transfer Object Pattern z
Osoba s položkami popisujícími adresu Osoba s vazbou na objekt Adresa
z
Základní problém: náklady na komunikaci z z z
z
z
Přenos dat po síti Serializace/deserializace dat Opakované vytváření a rušení instancí komponent Násobné dotazy do databáze Návrhové vzory pro J2EE
Získání skupiny datových položek jedním voláním
z
z
Naplnění a vrácení objektu přenášejícího data Rozhraní mezi prezentační a business vrstvou, resp. mezi různými komponentami business vrstvy
Zvýšení efektivity snížením komunikačních nákladů Zlepšení čitelnosti a struktury aplikace
17
Návrhové vzory pro J2EE
Data Transfer Object (DTO)
Data Transfer Hash Pattern
public class PatientDTO implements Serializable { public long pat_no = -1; public String fname = null; public String lname = null; public ArrayList addresses = new ArrayList(); }
z
Návrhové vzory pro J2EE
Často se měnící požadavky z z
z
public PatientDTO getPatientDTO() { PatientDTO pat = new PatientDTO(); pat.pat_no = pat_no.longValue(); pat.fname = fname; pat.lname = lname; pat.addresses.add(home); pat.addresses.add(work); return pat; }
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Svázání klienta a serveru stejnou verzí DTO Nutnost změny definice, chceme-li předávat více (či méně) dat
Využití Hashtable/HashMap pro uložení dat z
19
18
Potlačení typové kontroly v době překladu
Návrhové vzory pro J2EE
20
5
Technologie workflow
Databáze a datové vzory z
Možnost práce s více mechanismy perzistence z z
z z
Data Access Object Pattern z
Relační databáze + JDBC, JDO Textové a binární formáty, XML
z
Obecný pojem: datový zdroj Perzistence se nemá míchat s business logikou z
z
Oddělení kódu přistupujícího do databáze od zpracování dat Delegování zodpovědnosti za přístup do databáze na DAO, jenž pak komunikuje prostřednictvím DTO DAO je lokální objekt, neobsahuje žádnou logiku (jen metody get/set)
testování, závislost na konkrétních mechanismech perzistence, složitost Návrhové vzory pro J2EE
21
Data Access Object (DAO) Business Object
uses
uses
uses
DAO
Persistence Mechanism
z
Lazy Load
z
IsDirty pattern
z
Procedure Access Object
z
Vzory pro práci s primárními klíči
z
Vzory pro objektově relační mapování
z
z
uses
z
uses
Data Object
z
Návrhové vzory pro J2EE
22
Další vzory pro datovou vrstvu
creates/reads
Presentation Object
Návrhové vzory pro J2EE
23
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
načítání dat podle potřeby Ukládání dat podle potřeby Přístup k uloženým procedurám v SQL Generátory primárních klíčů
Návrhové vzory pro J2EE
24
6
Technologie workflow
Vzory na rozhraní business vrstvy z
Business Delegate Pattern
Dva typy rozhraní z z
z
s tlustým klientem s prezentační vrstvou na straně serveru
z z
z
Často jde o rozhraní Javy a starších technologií (legacy world) z
z
možnost postupného vylepšování nebo nahrazování zastaralých komponent Návrhové vzory pro J2EE
Definice klientského objektu zajišťujícího komunikaci s business objektem Plní roli modelu v MVC Zapouzdřuje znalosti o tom, jak najít business objekt, připojit se k němu a komunikovat s ním
z
25
lokální/vzdálená EJB komponenta, CORBA, webová služba apod.
Zpracovává různé zdroje výjimek a převádí je na sadu aplikačních výjimek Návrhové vzory pro J2EE
Příklad
Session Façade Pattern
public class PatientManagementDelegate {
z
Situace: K provedení jedné operace je třeba přistoupit současně k více EJB
z
Seskupení sady aktivit do session beanu, jehož voláním může klient zpracovat najednou celý případ Zapouzdřuje více session beanů, entity beanů a dalších služeb Zjednodušuje správu transakcí
public static PatientDTO createNewPatient(PatientDTO patient) throws InvalidPatientException { if( patient==null || patient.getFirstName()==null || patient.getLastName()== null ) throw new InvalidPatientException(“Full Name”); PatientDAO pDAO = PatientDAOFactory.getPatientDAO(); PatientDTO newPat = pDAO.createPatient(patient); return newPat; } Návrhové vzory pro J2EE
27
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
z z
Návrhové vzory pro J2EE
26
28
7
Technologie workflow
Další vzory z
Vzory pro zajištění souběžného přístupu z z
z
J2EE Antipatterns z
Transakční zpracování Zamykání
z
z
Vzory pro zasílání zpráv z z z
z
Point-to-Point Distribution Pattern Publish-Subscribe Pattern Vzory pro směrování zpráv
Návrhové vzory pro J2EE
z
z
z
Návrhové vzory pro J2EE
z
z
Např. úplné ukrytí SQL před dalšími vrstvami; drahé činnosti vypadají jako levné
The Magic Servlet z z
Zabránění úklidu dat tím, že data udržujeme ve vyrovnávací paměti Řešení: Soft reference
z
z
z
31
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
jeden servlet udělá vše např. čtení telefonních čísel z databáze a jejich formátování do HTML
Monolitické JSP podobné, vše v jednom JSP
Přeplněné session proměnné z
Návrhové vzory pro J2EE
30
Antivzory na prezentační vrstvě
Leak Collection z
Architektura
29
Příliš mnoho vrstev z
Malá zkušenost Nečitelný kód Cut-and-paste development
Typy z
Architectural Antipatterns z
Často se opakující chyby v návrhu Důvody jejich rozšíření:
umisťování dočasných nebo komplexních dat do session Návrhové vzory pro J2EE
32
8
Technologie workflow
Antivzory pro EJB z
Všechno je EJB z z
z
z
EJB nejsou řešením všech problémů Poměr mezi cenou a získanými výhodami
z
Round-Tripping z z
z
Závěr
z
Nastává při přenosu velkého množství dat Posílání balíku dat po malých částech
z
z
Stateful When Stateless Will Do z
Mnoho uvedených vzorů je obecných – platí nejen pro J2EE, ale i pro .NET Další diskuse o vzorech:
Literatura: Crawford, W., Kaplan, J.: J2EE Design Patterns. O’Reilly, 2003, ISBN 0-596-00427-3
Ukládání nepotřebných informací Návrhové vzory pro J2EE
www.theserverside.com www.theserverside.net
33
(c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava
Návrhové vzory pro J2EE
34
9