Daniel Kolman

Architektura Ginger

| 2 comments |

Ginger je náš framework pro webové aplikace. Tvoří ho knihovny s infrastrukturním kódem a sada doporučení (nebo spíš přikázání:-))), jak rozdělit aplikaci na vrstvy a které projekty umístit do které vrstvy. Je určen pro webovou vícevrstvou škálovatelnou aplikaci, která ukládá data do databáze.


Podporován je jednoduchý deployment na jeden počítač i složitější varianta s webovými servery v DMZ a aplikačními uvnitř sítě; v zásadě jde jen o změnu konfigurace.

Nedávno jsem o tom dělal interní přednášku, ze které pochází prezentace, kterou zde s laskavým svolením mého zaměstnavatele uveřejňuji. Dozvíte se v ní, jak vypadá cílové prostředí, pro které je Ginger určen(a), jak je aplikace rozdělená do vrstev, jak vypadá kód na jednotlivých vrstvách, co v našem případě znamená "M" v ASP.NET MVC a kolik návrhových vzorů z PoEAA používáme (nebo plánujeme používat).

Požadavek na oddělené nasazení webových a aplikačních serverů měl na architekturu Ginger zásadní vliv. Musíme totiž počítat s poměrně pomalým a nespolehlivým síťovým spojením (v porovnání s programováním v jedné aplikační doméně), a proto nemůžeme použít Open Session In View (OSIV) pattern, ani skládání ovládacích prvků ve stránce přes RenderAction. Všechny požadavky na data nutná pro renderování stránky potřebujeme mít už v controlleru, při volání aplikační vrstvy (Remote Facade), to znamená před tím, než se vůbec vytvoří instance View (kdo neví proč, nechť si přečte vynikající knihu Release It!). "M"odelem, který v ASP.NET MVC podstrkujeme View, je v našem případě ResponseMessage, kterou vrací aplikační vrstva. Díky tomu máme zcela oddělený doménový model (kde je aplikační logika) od View, a proto problém zmíněný na diskusi o MVC Best Practices, kdy hrozí že se z View bude měnit doménový model, je nám zcela cizí.

Abychom co nejvíce omezili opakování kódu na různých vrstvách, vytvořili jsme si pomocí DSL Tools modelovací jazyk, ze kterého spoustu kódu automaticky generujeme: SQL create scripts, doménové objekty, repository a query objekty a DTO objekty, které v sobě obsahují metadata, takže z nich je možné za běhu vygenerovat validační javascripty do stránky. Vygenerovaný kód je přitom možné rozšiřovat bez nutnosti úpravy DSL jazyka nebo generovacích šablon, díky partial třídám, nebo volitelně double derived vzoru.


Zde si můžete stáhnout plnou verzi prezentace, se všemi animacemi, které SlideShare neumí zobrazit.

(2) Comments

  1. Jirka bianco Vágner said...

    No dopr... to ... to .... to vypada jako totalni meganatlapanost riznuta vostrosti a zcela k doporuceni. Tohle tedka kutite v GMC? Prosim, ja chci zpaaaaattkyyyyy, uz budu hodneeeeeeeeeeeej! :D

    17. června 2009 22:07
  2. Ali Baba said...

    To nekutíme, všechno co je v tý prezentaci je už hotový;)

    18. června 2009 8:16

Leave a Response