Programování

Designové vzory umožňují lepší aplikace J2EE

J2EE (Java 2 Platform, Enterprise Edition) od svého založení zjednodušila konstrukci podnikových aplikací v Javě. Jak se J2EE stává široce přijímaným, vývojáři si uvědomují potřebu definovaných přístupů, které zjednodušují a standardizují vytváření aplikací. Tohoto cíle můžete začít dosáhnout standardizací aplikací architektonická vrstva.

Architektonická vrstva obecně zapouzdřuje technické složitosti aplikace nezávisle na obchodní logice, čímž poskytuje volné propojení mezi obchodní funkcí a základní technickou infrastrukturou. V tomto článku vysvětluji vznikající metodu pro budování aplikační architektury pro projekty J2EE - metodu, která využívá návrhové vzory k zajištění standardizace a jednoduchosti, které vyžaduje dobrá architektura.

Architektura aplikací a J2EE

J2EE je skvělá infrastrukturní technologie. Poskytuje jednotný standard pro úkoly na nižší úrovni technologického zásobníku, jako je databázová komunikace nebo distribuce aplikací. J2EE však nevede vývojáře k vytváření úspěšných aplikací. Tvůrci J2EE při pohledu dolů do technologického zásobníku uvažovali: „Jak můžeme standardizovat tato API?“ Měli se podívat na vývojáře aplikací a zeptat se: „Jak mohu dát vývojářům stavební kameny, které potřebují, aby se soustředili na svou obchodní aplikaci?“

Při zahájení nového projektu J2EE se někteří členové týmu často ptají: „Pokud je J2EE samo o sobě architekturou, proč potřebujeme více?“ Mnoho vývojářů si myslelo, že v počátcích J2EE byla tato mylná představa, ale zkušení vývojáři J2EE chápou, že J2EE neposkytuje aplikační architekturu nezbytnou pro konzistentní poskytování vysoce kvalitních aplikací. Tito vývojáři k vyplnění této mezery často používají návrhové vzory.

Designové vzory

V programování vám návrhové vzory umožňují využít kolektivní zkušenosti vývojářské komunity sdílením problémů a řešení, z nichž mají prospěch všichni. Návrhový vzor musí vystihovat definici a kontext problému, možné řešení a jeho důsledky.

Pro účely aplikační architektury J2EE spadají návrhové vzory do dvou kategorií: obecné vzory vývoje softwaru a ty vzory, které identifikují konkrétní výzvy J2EE. Specifické návrhové vzory J2EE identifikují minimální sadu známých problémů, které by solidní aplikační architektura měla vyřešit. První skupina, skupina vzorců vývoje softwaru, která není specifická pro J2EE, se ukazuje stejně silná - ne pro identifikaci problémů, ale pro vedení konstrukce architektury.

Prozkoumejme každou oblast podrobněji.

Návrhové vzory J2EE

J2EE designové vzory se vyvíjely v posledních několika letech, protože komunita Java získala zkušenosti s J2EE. Tyto návrhové vzory identifikují potenciální problémy, které se vyskytnou při použití různých technologií specifikovaných J2EE, a pomáhají vývojářům s konstrukcí požadavků aplikační architektury. Populární návrhový vzor Front Controller například transformuje nestrukturovaný kód servletu na řadič připomínající zdokonalený vývoj grafického uživatelského rozhraní (GUI).

Návrhové vzory J2EE identifikují ty problémy domény, které se s největší pravděpodobností objeví ve vašich projektech J2EE. Pokud by byly problémy vzácné, návrhové vzory by se nevyvinuly tak, aby jim vyhověly. S ohledem na to budete mít prospěch z řešení každého problému domény ve vaší architektuře. Chcete-li je všechny vyřešit, vytvořte kontrolní seznam, který ověří úplnost vaší architektury. Tento proces kontrastuje s procesem návrhových vzorů vývoje softwaru, o kterém pojednávám dále, protože tyto vzory musíte použít, pouze pokud a pokud je to vhodné.

Kde tedy najdete návrhové vzory J2EE? Sun Microsystems nabízí dvě knihy, které obsahují mnoho vzorů J2EE:

  • Skupina J2EE BluePrint Návrh podnikových aplikací s platformou Java 2 (Enterprise Edition), Nicholas Kassem a kol. (Addison-Wesley, 2000; ISBN: 0201702770)
  • Skupina profesionálních služeb Sun Core J2EE Patterns: Best Practices and Design Strategies, Deepak Alur, John Crupi a Dan Malks (Prentice Hall, 2001; ISBN: 0130648841)

(Odkazy na obě knihy najdete v Zdrojích.)

Kromě zdrojů společnosti Sun nabízejí další publikace informace o návrhových vzorech J2EE, včetně různých průmyslových časopisů Java nebo webových stránek (například JavaWorld), stejně jako četné knihy. (Odkazy na některé z těchto webů, včetně JavaWorld 's Designové vzory Stránka s aktuálním rejstříkem.)

Návrhové vzory vývoje softwaru

Uvědomte si také návrhové vzory vývoje softwaru rozdělené na obecné objektově orientované (OO) návrhové vzory a návrhové vzory specifické pro Javu. Například vzor Factory představuje výkonný návrhový vzor OO pro zapouzdření vytváření objektů, aby bylo možné opětovné použití a splnění měnících se požadavků systému. Co se týče jejich části, návrhové vzory v jazyce Java zohledňují specifika jazyka Java. Některé jsou pro Javu jedinečné a jsou obvykle neformální (například výjimky a primitiva), zatímco jiné jsou OO vzory vylepšené pro použití v Javě. Slavná kniha Gang čtyř, Designové vzory Eric Gamma et al., podrobně popisuje řadu obecných vzorů vývoje softwaru užitečných pro všechny programátory.

Nezavrhujte tyto vzory jednoduše proto, že nejsou specifické pro J2EE. Naopak, takové vzory se mohou ukázat stejně výkonnými, ne-li více než návrhovými vzory J2EE, protože:

  • Zatímco návrhové vzory J2EE jsou nové a vyvíjí se (protože J2EE je nový a vyvíjí se), ostatní vzory těží z věku, protože průmysl měl více času je přezkoumat a vylepšit.
  • Často slouží jako základ, z něhož vycházejí návrhové vzory J2EE.
  • Staví základ, na kterém jsou implementována řešení specifická pro J2EE. Správná konstrukce tohoto základu ovlivňuje robustnost a rozšiřitelnost celé architektury. Pokud by nebyl správně zkonstruován, základ by minimalizoval užitečnost architektury bez ohledu na to, kolik problémů J2EE řeší.

Neprovádějte kontrolní seznam pokrývající vzory vývoje softwaru, které vaše architektura vyžaduje, jako byste to udělali se vzory J2EE. Místo toho použijte takové vzory, kde je to vhodné, na základě konkrétních výzev vašeho projektu. Mnoho vývojářů se mylně domnívá, že jejich produkty se zlepší, pokud použijí více vzorů - nebo pokud použijí všechny! To však není tento případ. Při rozhodování, které vzory použít a jak je používat společně, používejte diskrétnost a jemnost.

Návrhové vzory: Kde je kód?

Mějte na paměti, že návrhové vzory nepřicházejí s přesnou implementací nebo zdrojovým kódem, který použijete. Nabídka návrhových vzorů sahá od řídkých textových popisů až po bohatou dokumentaci až po nějaký ukázkový kód. Výzvou je uplatnění silných nápadů vzorů. Tyto myšlenky musí být aplikovány na prostředí, ve kterém budou použity; prostředí definuje správnou implementaci.

Jako analogii zvažte návrhový vzor pro stavbu základů domu. Návrhový vzor identifikuje problém, kontext a možné řešení pro konstrukci základny - informace nesmírně cenné pro stavebního dělníka v terénu. Pracovník však musí stále budovat základy. Neprospělo by tomu stavebnímu pracovníkovi to, že dostal základ (podobně jako vývojáři softwaru, který dostal implementaci)? Možná by z tohoto základu byla jen betonová deska, na které by mohl být dům postaven. Problém: Nadace se musí integrovat se samotným domem a pozemkem, kde bude dům bydlet. Jak může takový předpřipravený základ pojmout všechny možné půdorysy domu (obdélník, čtverec a jiné podivné tvary) a všechny možné krajiny (na kopci, uprostřed lesa atd.)?

Zpět do světa softwaru závisí proveditelnost použití předem připravených návrhových vzorů na dvou faktorech:

  • Implementace, nikoli jednotlivé vzory návrhu, představuje řešení. Řešení by mohlo zahrnovat více návrhových vzorů, a přitom by vědělo, jak jednotlivé návrhové vzory spolu hrají.
  • Řešení musí být přizpůsobivé, což odpovídá na poslední otázku z analogie předem postaveného základu: základ musí být schopen přizpůsobit se terénu a půdorysům. Jak si dokážete představit, stavět přizpůsobivý základ na rozdíl od standardního základu by vyžadovalo mimořádně zkušeného řemeslníka.

Společné návrhové vzory

V tabulce níže jsou uvedeny některé běžné vzory návrhu jak ze zdrojů J2EE, tak ze širších vzorů OO.

Společné návrhové vzory
Návrhové vzory J2EEVzory vývoje softwaru
Fasáda relacejedináček
Hodnotový objekt AssemblerMost
Vzor vyhledávače služebPrototyp
Obchodní delegátAbstraktní továrna
Složená entitaMuší váha
Obslužný program seznamu hodnotProstředník
Vyhledávač služebStrategie
Složená entitaNatěrač
Hodnotový objektStát
Služba pracovníkoviIterátor
Objekt pro přístup k datůmŘetězec odpovědnosti
Zachytávací filtrŘadič zobrazení modelu II
Zobrazit pomocníkaMemento
Složený pohledStavitel
Zobrazení dispečeraTovární metoda

Podívejme se na dva příklady návrhových vzorů J2EE: Session Facade a Value Object patterns. Oba ukazují, jak se návrhové vzory J2EE zaměřují na konkrétní problémy prostředí J2EE, na rozdíl od návrhových vzorů vývoje softwaru, které se obecně vztahují na jakékoli úsilí při vývoji aplikací.

Příklad: Session Facade J2EE

Vzor Session Facade se vyvinul ze zkušeností s Enterprise JavaBeans (EJB). Systémy postavené na nově zavedené entitě EJB (které komunikují s databází) zpomalovaly procházení. Testování výkonu odhalilo problémy vyplývající z několika síťových hovorů provedených při komunikaci s entitami EJB, které přidaly režii pro navázání síťového připojení, serializaci dat pro odesílání i příjem a další efekty.

V reakci na to vzor Session Facade zlepšil výkon centralizací těchto několika zásahů do jednoho hovoru. Session Facade využívá EJB relace bez státní příslušnosti k zprostředkování mezi voláním klienta a požadovanou interakcí EJB entity. Existuje více vzorů pro zlepšení výkonu přístupu k databázi, včetně vzorů čtečky rychlých jízdních pruhů a datových objektů.

Příklad: Vzor J2EE hodnotového objektu

Cílem vzoru Value Object J2EE je také zlepšit výkon systémů, které používají EJB v síti. Tato síťová volání vyvolávající režii z předchozího příkladu načítají jednotlivá datová pole. Například můžete mít a Osoba entita EJB metodami jako getFirstName (), getMiddleName (), a getLastName (). S návrhovým vzorem Value Object můžete takovéto více síťových volání omezit na jedno volání metodou na entitě EJB, jako je například getPersonValueObject (), který vrátí data najednou. Tento hodnotový objekt obsahuje data, která entita EJB představuje, a lze k nim podle potřeby přistupovat, aniž by vznikly režijní náklady na síťové volání.

Příklad: Vzor Flyweight OO

Jako příklad široce použitelného návrhového vzoru OO zvažte vzor Flyweight, který zlepšuje výkon aplikace prostřednictvím opětovného použití objektu. Software OO produkuje režii - zbytečné cykly CPU, sběr odpadu a přidělování paměti - když vytváří a ničí objekt. Pokud by systém mohl tyto objekty znovu použít, můžete se této režii vyhnout. Objekty však často nejsou opakovaně použitelné, protože obsahují informace (tzv Stát) specifické pro aktuálního uživatele objektu. Vzor setrvačné hmotnosti poskytuje přístupy k přesunu tohoto stavu jinde, takže lze zbytek objektu znovu použít.

Spojte je všechny: příklad vytrvalosti

Nyní, když znáte základy, můžete začít používat návrhové vzory ve svých vývojových postupech. Ale jak vlastně používáte vzory? Začněte identifikováním domény nebo technického problému vyžadujícího řešení. Perzistence - řešení prastarého nesouladu databáze mezi objektem a relací - představuje dobrý příklad pro většinu podnikových aplikací. Podívejme se na kroky potřebné k návrhu a sestavení vrstvy perzistence aplikační architektury.

V návaznosti na tradiční přístup k architektuře a designu OO vytvořte případy použití popisující vaše potřeby perzistence. Možné případy použití zahrnují:

  1. Perzistence objektu by měla být z pohledu vývojářů transparentní.
  2. Mechanismy perzistence - entity EJB, Data Access Objects atd. - by měly být konfigurovatelné na architektonické úrovni.
  3. Naše architektura by měla využívat technologie J2EE, ale zapouzdřit závislosti J2EE. Měli bychom být schopni změnit dodavatele aplikačního serveru J2EE, verze J2EE nebo úplně vyměnit J2EE, aniž bychom vyžadovali generální opravu celé aplikace.
  4. Výsledná vrstva perzistence by měla být znovu použitelná napříč projekty. To by mělo být součástí naší probíhající aplikační architektury.

Jakmile identifikujete problém, můžete se rozhodnout, které vzory se použijí. Nezapomeňte, že u vzorů J2EE byste měli určit, které vzory platí v problémové oblasti, a řešit je. Pokud jde o vytrvalost, příslušné návrhové vzory J2EE jsou (viz knihy návrhových vzorů Sun J2EE ve zdrojích):

  • Hodnotový objekt
  • Fast Lane Reader
  • Objekt pro přístup k datům
  • Fasáda relace
  • Složená entita
  • Obslužný program seznamu hodnot

Vzhledem k tomu, že budete zaměstnávat EJB, zahrňte vzory obchodních delegátů a vyhledávačů služeb k řešení přístupu k EJB.

Řešení druhého a třetího případu použití navíc vyžaduje tradiční návrhové vzory vývoje softwaru. Jak zapouzdřujete závislosti a máte konfigurovatelné mechanismy vytrvalosti? Některé použitelné vzorce vývoje softwaru zahrnují:

  • Továrna
  • Prostředník
  • Strategie
$config[zx-auto] not found$config[zx-overlay] not found