Programovanie

Dizajnové vzory vytvárajú lepšie aplikácie J2EE

J2EE (Java 2 Platform, Enterprise Edition) od svojho vzniku zjednodušila konštrukciu podnikových aplikácií v Jave. S čoraz širším prijatím J2EE si vývojári uvedomujú potrebu definovaných prístupov, ktoré zjednodušujú a štandardizujú vytváranie aplikácií. Tento cieľ môžete začať dosahovať štandardizáciou aplikácií architektonická vrstva.

Architektonická vrstva všeobecne zapuzdruje technické zložitosti aplikácie nezávisle od obchodnej logiky, čím poskytuje voľné spojenie medzi obchodnou funkčnosťou a podkladovou technickou infraštruktúrou. V tomto článku vysvetľujem vznikajúcu metódu pre budovanie aplikačnej architektúry pre projekty J2EE - takú, ktorá využíva návrhové vzory na zabezpečenie štandardizácie a jednoduchosti, ktoré vyžaduje dobrá architektúra.

Architektúra aplikácie a J2EE

J2EE je skvelá infraštruktúrna technológia. Poskytuje jednotný štandard pre úlohy na nižšej úrovni technologického balíka, ako je napríklad databázová komunikácia alebo distribúcia aplikácií. J2EE však nevedie vývojárov k vytváraniu úspešných aplikácií. Tvorcovia J2EE sa pri pohľade dolu na technologický zásobník čudovali: „Ako môžeme štandardizovať tieto API?“ Mali sa pozrieť na vývojárov aplikácií a opýtať sa ich: „Ako môžem vývojárom poskytnúť stavebné kamene, ktoré potrebujú, aby sa mohli sústrediť na svoju obchodnú aplikáciu?“

Pri zakladaní nového projektu J2EE sa niektorí členovia tímu často pýtajú: „Ak je J2EE sama o sebe architektúrou, načo potrebujeme viac?“ Mnoho vývojárov zastávalo túto mylnú predstavu v začiatkoch J2EE, ale ostrieľaní vývojári J2EE chápu, že J2EE nezabezpečuje architektúru aplikácií potrebnú na neustále dodávanie vysoko kvalitných aplikácií. Títo vývojári na vyplnenie tejto medzery často používajú návrhové vzory.

Dizajnové vzory

V programovaní vám návrhové vzory umožňujú využívať spoločné skúsenosti vývojárskej komunity zdieľaním problémov a riešení, z ktorých majú prospech všetci. Návrhový vzor musí zachytávať definíciu a kontext problému, možné riešenie a jeho dôsledky.

Na účely aplikačnej architektúry J2EE sa návrhové vzory delia na dve kategórie: všeobecné vzory vývoja softvéru a tie vzory, ktoré identifikujú špecifické výzvy J2EE. Špecifické návrhové vzory J2EE identifikujú minimálny súbor známych problémov, ktoré by mala solídna aplikačná architektúra vyriešiť. Prvá skupina, vzorcov vývoja softvéru, ktoré nie sú špecifické pre J2EE, sa ukazuje rovnako silná - nie na identifikáciu problémov, ale na vedenie konštrukcie architektúry.

Poďme preskúmať každú oblasť podrobnejšie.

Návrhové vzory J2EE

Dizajnové vzory J2EE sa vyvíjali za posledných pár rokov, keď komunita Java získala skúsenosti s J2EE. Tieto návrhové vzory identifikujú potenciálne problémy, ktoré sa môžu vyskytnúť pri používaní rôznych technológií špecifikovaných J2EE, a pomáhajú vývojárom zostaviť požiadavky aplikačnej architektúry. Napríklad populárny návrhový vzor Front Controller transformuje neštruktúrovaný kód servletu na radič pripomínajúci prepracovaný vývoj grafického používateľského rozhrania (GUI).

Dizajnové vzory J2EE identifikujú tie problémy domény, ktoré sa s najväčšou pravdepodobnosťou vyskytnú vo vašich projektoch J2EE. Ak by problémy boli skutočne zriedkavé, vzory návrhu by sa nevyvinuli tak, aby im vyhovovali. Z tohto hľadiska budete mať prospech z riešenia každého problému domény vo svojej architektúre. Ak chcete vyriešiť všetky, vytvorte kontrolný zoznam, ktorý overí úplnosť vašej architektúry. Tento proces je v kontraste s procesom návrhových vzorov vývoja softvéru, o ktorom pojednávam ďalej, pretože tieto vzory musíte použiť, iba ak a ak je to vhodné.

Kde teda nájdete návrhové vzory J2EE? Spoločnosť Sun Microsystems ponúka dve knihy, ktoré obsahujú veľa vzorov J2EE:

  • Skupina J2EE BluePrint Navrhovanie podnikových aplikácií s platformou Java 2 (Enterprise Edition), Nicholas Kassem a kol. (Addison-Wesley, 2000; ISBN: 0201702770)
  • Skupina profesionálnych služieb Sun Základné vzory J2EE: Osvedčené postupy a stratégie návrhu, Deepak Alur, John Crupi a Dan Malks (Prentice Hall, 2001; ISBN: 0130648841)

(Odkazy na obe knihy nájdete v zdrojoch.)

Okrem zdrojov spoločnosti Sun ponúkajú ďalšie publikácie informácie o návrhových vzoroch J2EE, vrátane rôznych časopisov alebo priemyselných webov Java (ako napr. JavaWorld), ako aj početné knihy. (Odkazy na niektoré z týchto webov vrátane JavaWorld 's Dizajnové vzory Stránka s aktuálnym indexom.)

Dizajnové vzory vývoja softvéru

Pamätajte tiež na návrhové vzory vývoja softvéru rozdelené na všeobecné objektovo orientované návrhové vzory a návrhové vzory špecifické pre Javu. Napríklad vzor Factory predstavuje výkonný OO návrhový vzor na zapuzdrenie vytvárania objektov, ktorý umožňuje opätovné použitie a vyhovuje meniacim sa požiadavkám systému. Pokiaľ ide o ich časť, návrhové vzory v jazyku Java zohľadňujú špecifiká jazyka Java. Niektoré sú jedinečné pre Javu a zvyčajne sú neformálne (napríklad výnimky a primitívy), zatiaľ čo iné sú OO vzory rafinované pre použitie v Jave. Slávna kniha Gang štyroch, Dizajnové vzory Eric Gamma a kol. podrobne opisuje početné všeobecné vzorce vývoja softvéru užitočné pre všetkých programátorov.

Nezavrhujte tieto vzory len preto, že nie sú špecifické pre J2EE. Naopak, tieto vzory sa môžu ukázať rovnako výkonnými, ak nie viac, ako návrhové vzory J2EE, pretože:

  • Zatiaľ čo návrhové vzory J2EE sú nové a vyvíjajú sa (pretože J2EE je nový a vyvíja sa), ostatné vzory profitujú z veku, pretože priemysel mal viac času na ich preskúmanie a zdokonalenie.
  • Často slúžia ako základ, z ktorého vychádzajú dizajnérske vzory J2EE.
  • Budujú základňu, na ktorej sa implementujú riešenia špecifické pre J2EE. Správna konštrukcia tohto základu ovplyvňuje robustnosť a rozšíriteľnosť celej architektúry. Ak by nebol správne zostavený, základňa by minimalizovala užitočnosť architektúry bez ohľadu na to, koľko problémov J2EE rieši.

Nerobte kontrolný zoznam pokrývajúci vzory vývoja softvéru, ktoré vaša architektúra vyžaduje, ako by to bolo v prípade vzorov J2EE. Namiesto toho použite také vzorce, kde je to vhodné, na základe konkrétnych výziev vášho projektu. Mnoho vývojárov sa mylne domnieva, že ich výrobky sa zlepšia, ak použijú viac vzorov, alebo ak použijú všetky! To však nie je tento prípad. Pri rozhodovaní, ktoré vzory použijete a ako ich spoločne používať, buďte diskrétni a jemní.

Dizajnové vzory: Kde je kód?

Majte na pamäti, že návrhové vzory neprichádzajú s presnou implementáciou alebo zdrojovým kódom, ktorý použijete. Ponuka dizajnových vzorov siaha od riedkych textových popisov cez bohatú dokumentáciu až po nejaký ukážkový kód. Výzvou je uplatnenie silných myšlienok vzorov. Tieto myšlienky musia byť aplikované na prostredie, v ktorom budú použité; prostredie definuje správnu implementáciu.

Ako analógiu zvážte návrhový vzor na vytvorenie základov domu. Návrhový vzor identifikuje problém, kontext a možné riešenie stavby základu - informácie nesmierne cenné pre stavebného robotníka v teréne. Pracovník musí napriek tomu postaviť základ. Neprospelo by tomu stavebnému pracovníkovi viac, keby dostal základ (podobne ako vývojárovi softvéru, ktorý dostal implementáciu)? Možno by tento základ bol iba betónová doska, na ktorej by sa dal dom postaviť. Problém: Nadácia sa musí integrovať do samotného domu a do pozemku, kde bude dom bývať. Ako môže taký vopred zostavený základ pojať všetky možné pôdorysy domu (obdĺžnik, štvorec a iné nepárne tvary) a všetky možné krajiny (na vrchole kopca, uprostred lesa atď.)?

Vo svete softvéru je uskutočniteľnosť použitia vopred pripravených návrhových vzorov závislá od dvoch faktorov:

  • Implementácia, nie jednotlivé návrhové vzory, predstavuje riešenie. Riešenie by mohlo obsahovať viac dizajnových vzorov a pri tom by vedelo, ako jednotlivé dizajnové vzory hrajú spolu.
  • Riešenie musí byť prispôsobivé, čo odpovedá na poslednú otázku z analógie vopred postaveného základu: základ musí byť schopný prispôsobiť sa terénu a pôdorysom. Ako si dokážete predstaviť, bolo by potrebné mimoriadne zručného remeselníka, aby postavil prispôsobiteľný základ na rozdiel od štandardného základu.

Bežné dizajnové vzory

V tabuľke nižšie sú uvedené niektoré bežné návrhové vzory z oboch zdrojov J2EE a zo širších vzorov OO.

Bežné dizajnové vzory
Návrhové vzory J2EEVzory vývoja softvéru
Fasáda relácieSingleton
Hodnotový objekt AssemblerMost
Vzor vyhľadávača služiebPrototyp
Obchodný delegátAbstraktná továreň
Zložený subjektMušia váha
Obsluha zoznamu hodnôtSprostredkovateľ
Vyhľadávač služiebStratégia
Zložený subjektMaliarka
Hodnotový objektŠtát
Služba pracovníkoviIterátor
Objekt prístupu k údajomReťaz zodpovednosti
Zachytávací filterOvládač modelu View II
Zobraziť pomocníkaMemento
Zložený pohľadStaviteľ
Zobrazenie dispečeraTovárenská metóda

Pozrime sa na dva príklady návrhových vzorov J2EE: vzory fasády relácie a vzory hodnotových objektov. Obidve demonštrujú, ako sa návrhové vzory J2EE zameriavajú na problémy konkrétne v prostredí J2EE, na rozdiel od návrhových vzorov vývoja softvéru, ktoré sa všeobecne vzťahujú na akékoľvek úsilie pri vývoji aplikácií.

Príklad: Session Facade J2EE vzor

Vzor Session Facade sa vyvinul zo skúseností s Enterprise JavaBeans (EJB). Systémy postavené na novo zavedenej entite EJB (ktoré komunikujú s databázou) spomalili na prechádzanie. Testovanie výkonu odhalilo problémy vyplývajúce z viacerých sieťových hovorov uskutočnených pri komunikácii s entitami EJB, ktoré pridali réžiu na nadviazanie sieťového pripojenia, serializáciu údajov pre odosielanie aj prijímanie a ďalšie efekty.

V reakcii na to vzor Session Facade zlepšil výkon centralizáciou týchto viacerých sieťových zásahov do jedného hovoru. Session Facade využíva bezstavovú reláciu EJB na sprostredkovanie medzi volaním klienta a požadovanou interakciou EJB entity. Existuje viac vzorov na zlepšenie výkonu prístupu do databázy, vrátane vzorov Fast Lane Reader a Data Access Object.

Príklad: Vzor Value Object J2EE

Cieľom modelu Value Object J2EE je tiež zlepšiť výkonnosť systémov, ktoré používajú EJB v sieti. Tieto sieťové volania vyvolávajúce réžiu z predchádzajúceho príkladu načítajú jednotlivé dátové polia. Napríklad môžete mať a Osoba subjekt EJB metódami ako napr getFirstName (), getMiddleName ()a getLastName (). Pomocou návrhového vzoru Value Object môžete takéto viacnásobné sieťové volania obmedziť na jedno volanie pomocou metódy na entite EJB, ako je napr. getPersonValueObject (), ktorá vráti údaje naraz. Tento hodnotový objekt obsahuje údaje, ktoré predstavuje entita EJB, a je k nim možné pristupovať podľa potreby bez toho, aby vznikli náklady na sieťové volanie.

Príklad: Vzor Flyweight OO

Ako príklad široko použiteľného návrhového vzoru OO zvážte vzor Flyweight, ktorý zlepšuje výkon aplikácie prostredníctvom opätovného použitia objektu. Softvér OO produkuje réžiu - zbytočné cykly procesora, zber odpadu a prideľovanie pamäte - keď vytvára a ničí objekt. Ak by systém mohol tieto objekty znova použiť, mohli by ste sa vyhnúť týmto režijným nákladom. Objekty však často nie sú opakovane použiteľné, pretože obsahujú informácie (tzv štát) špecifické pre aktuálneho používateľa objektu. Vzor mušej váhy poskytuje prístupy k presunu tohto stavu inde, aby bolo možné zvyšok objektu znovu použiť.

Dajte ich dokopy: Príklad vytrvalosti

Teraz, keď poznáte základy, môžete vo svojich vývojových postupoch začať používať návrhové vzory. Ako však vlastne používate vzory? Začnite identifikáciou domény alebo technického problému vyžadujúceho riešenie. Perzistencia - riešenie vekového nesúladu medzi objektovými a relačnými databázami - predstavuje dobrý príklad pre väčšinu podnikových aplikácií. Pozrime sa na kroky potrebné na návrh a vytvorenie vrstvy vytrvalosti aplikačnej architektúry.

Podľa tradičného prístupu k architektúre a dizajnu OO vytvorte prípady použitia, ktoré popisujú vaše potreby vytrvalosti. Možné prípady použitia zahŕňajú:

  1. Perzistencia objektu by mala byť z pohľadu vývojárov transparentná.
  2. Mechanizmy perzistencie - entity EJB, objekty prístupu k údajom atď. - by mali byť konfigurovateľné na architektonickej úrovni.
  3. Naša architektúra by mala využívať technológie J2EE, ale zapuzdrovať závislosti J2EE. Mali by sme byť schopní zmeniť dodávateľov aplikačného servera J2EE, verzie J2EE alebo úplne vymeniť J2EE bez toho, aby sme vyžadovali generálnu opravu celej aplikácie.
  4. Výsledná vrstva perzistencie by mala byť opakovane použiteľná pre všetky projekty. To by malo byť súčasťou našej prebiehajúcej aplikačnej architektúry.

Po identifikácii problému môžete rozhodnúť, ktoré vzory sa použijú. Pamätajte, že pre vzory J2EE by ste mali určiť, ktoré vzory sa uplatňujú v problémovej oblasti, a riešiť ich. Z hľadiska vytrvalosti sú príslušné návrhové vzory J2EE (pozri príručky návrhových vzorov spoločnosti Sun Sun J2EE v zdrojoch):

  • Hodnotový objekt
  • Fast Lane Reader
  • Objekt prístupu k údajom
  • Fasáda relácie
  • Zložený subjekt
  • Obsluha zoznamu hodnôt

Pretože budete zamestnávať EJB, zahrňte vzory obchodných delegátov a lokátorov služieb na riešenie prístupu k EJB.

Riešenie druhého a tretieho prípadu použitia navyše vyžaduje tradičné návrhové vzory vývoja softvéru. Ako zapuzdrujete závislosti a máte konfigurovateľné mechanizmy pretrvávania? Niektoré príslušné vzory vývoja softvéru zahŕňajú:

  • Továreň
  • Sprostredkovateľ
  • Stratégia
$config[zx-auto] not found$config[zx-overlay] not found