Generování a konfigurace aplikace z modelů
Části aplikace můžete vygenerovat nebo nakonfigurovat z modelu.
Model představuje požadavky přímo než kód. Odvozením chování aplikace přímo z modelu můžete reagovat na změněné požadavky mnohem rychleji a spolehlivěji než aktualizací kódu. I když se k nastavení odvození vyžaduje určitá počáteční práce, tato investice se vrátí, pokud očekáváte změny požadavků nebo pokud plánujete provést několik variant produktu.
Generování kódu aplikace z modelu
Nejjednodušší způsob, jak vygenerovat kód, je použití textových šablon. Kód můžete vygenerovat ve stejném řešení sady Visual Studio, ve kterém model uchováváte. Další informace naleznete v tématu:
Vytváření kódu z jazyka specifického pro doménu
Tato metoda se dá snadno použít přírůstkově. Začněte s aplikací, která funguje jenom pro konkrétní případ, a zvolte několik jeho částí, které se mají lišit od modelu. Přejmenujte zdrojové soubory těchto částí tak, aby se staly textovými šablonami (.tt). V tomto okamžiku se zdrojové soubory .cs automaticky vygenerují ze souborů šablony, takže aplikace bude fungovat stejně jako předtím.
Pak můžete vzít jednu část kódu a nahradit ji výrazem textové šablony, který načte model a vygeneruje tuto část zdrojového souboru. Alespoň jedna hodnota modelu by měla vygenerovat původní zdroj, abyste aplikaci mohli spustit znovu a fungovala jako předtím. Po otestování různých hodnot modelu můžete přejít k vložení výrazů šablony v jiné části kódu.
Tato přírůstková metoda znamená, že generování kódu je obvykle přístup s nízkým rizikem. Výsledné aplikace obvykle fungují téměř i ručně napsané verze.
Pokud ale začnete s existující aplikací, můžete zjistit, že k oddělení různých chování, které se řídí modelem, je potřeba hodně refaktoringu, aby bylo možné je nezávisle měnit. Při odhadu nákladů na projekt doporučujeme posoudit tento aspekt aplikace.
Konfigurace aplikace z modelu
Pokud chcete změnit chování aplikace za běhu, nemůžete použít generování kódu, které generuje zdrojový kód před kompilací aplikace. Místo toho můžete navrhnout aplikaci tak, aby model četla, a odpovídajícím způsobem měnit její chování. Další informace naleznete v tématu:
Postupy: Otevření modelu ze souboru v kódu programu
Tuto metodu lze také použít přírůstkově, ale na začátku je k dispozici více práce. Potřebujete napsat kód, který bude číst model, a nastavit architekturu, která umožňuje, aby její hodnoty byly přístupné pro části proměnných. Vytvoření obecných proměnných částí je dražší než generování kódu.
Obecná aplikace obvykle funguje méně dobře než její konkrétní protějšky. Pokud je výkon zásadní, měl by váš plán projektu zahrnovat posouzení tohoto rizika.
Vývoj odvozené aplikace
Pro vás můžou být užitečné následující obecné pokyny.
Začněte specifická a pak zobecňovat. Nejprve napište konkrétní verzi aplikace. Tato verze by měla fungovat v jedné sadě podmínek. Až budete spokojeni s tím, že funguje správně, můžete některé z nich odvodit z modelu. Postupně rozšiřujte odvozené části.
Můžete například navrhnout web, který má určitou sadu webových stránek, a teprve potom navrhnout webovou aplikaci, která prezentuje stránky definované v modelu.
Modelujte variantní aspekty. Identifikujte aspekty, které se budou lišit, a to buď mezi jedním a druhým nasazením, nebo v průběhu času při změně požadavků. Jedná se o aspekty, které by měly být odvozeny z modelu.
Pokud se například změní sada webových stránek a propojení mezi nimi, ale styl a formát stránek jsou vždy stejné, model by měl popisovat odkazy, ale nemusí popisovat formát stránek.
Oddělené obavy. Pokud lze proměnné aspekty rozdělit do nezávislých oblastí, použijte pro každou oblast samostatné modely. Pomocí modelu ModelBus můžete definovat operace, které ovlivňují oba modely, a omezení mezi nimi.
Pomocí jednoho modelu můžete například definovat navigaci mezi webovými stránkami a jiným modelem k definování rozložení stránek.
Modelujte požadavek, nikoli řešení. Navrhujte model tak, aby popsal požadavky uživatelů. Naproti tomu notaci nevyvrhujte podle proměnných aspektů implementace.
Například model webové navigace by měl představovat webové stránky a hypertextové odkazy mezi nimi. Webový navigační model by neměl ve vaší aplikaci představovat fragmenty HTML nebo tříd.
Generování nebo interpretace? Pokud se požadavky pro konkrétní nasazení zřídka změní, vygenerujte z modelu kód programu. Pokud se požadavky můžou často měnit nebo mohou existovat ve více než jedné variantě ve stejném nasazení, zapište aplikaci, aby mohla číst a interpretovat model.
Pokud například použijete model webu k vývoji řady různých a samostatně nainstalovaných webů, měli byste vygenerovat kód webu z modelu. Tento model ale používáte k řízení webu, který se každý den mění, pak je lepší napsat webový server, který model čte a prezentuje web odpovídajícím způsobem.
UML nebo DSL? Zvažte vytvoření zápisu modelování pomocí stereotypů k rozšíření UML. Definujte DSL, pokud neexistuje žádný diagram UML, který odpovídá účelu. Vyhněte se ale narušení standardní sémantiky UML.
Diagram tříd UML je například kolekce polí a šipek; s tímto zápisem můžete teoreticky definovat cokoli. Nedoporučujeme ale používat diagram tříd s výjimkou případů, kdy ve skutečnosti popisujete sadu typů. Diagramy tříd můžete například přizpůsobit tak, aby popisily různé typy webových stránek.