Generera och konfigurera din app från modeller

Du kan generera eller konfigurera delar av ditt program från en modell.

Modellen representerar kraven mer direkt än koden. Genom att härleda programmets beteende direkt från modellen kan du svara på ändrade krav mycket snabbare och mer tillförlitligt än genom att uppdatera koden. Även om det krävs lite initialt arbete för att konfigurera härledningen returneras den här investeringen om du förväntar dig ändringar i kraven eller om du planerar att göra flera varianter av produkten.

Generera koden för ditt program från en modell

Det enklaste sättet att generera kod är att använda textmallar. Du kan generera kod i samma Visual Studio-lösning där du behåller modellen. Mer information finns i:

  • Design-Time kodgenerering med hjälp av T4-textmallar

  • Generera kod från ett Domain-Specific språk

    Den här metoden är enkel att använda stegvis. Börja med ett program som bara fungerar för ett visst fall och välj några delar av det som du vill variera från modellen. Byt namn på källfilerna för dessa delar så att de blir textmallsfiler (.tt). Nu genereras källan .cs filer automatiskt från mallfilerna, så programmet fungerar som det gjorde tidigare.

    Sedan kan du ta en del av koden och ersätta den med ett textmallsuttryck som läser modellen och genererar den delen av källfilen. Minst ett värde för modellen bör generera den ursprungliga källan så att du kan köra programmet igen och det fungerar som tidigare. När du har testat olika modellvärden kan du gå vidare för att infoga malluttryck i en annan del av koden.

    Den här inkrementella metoden innebär att kodgenerering vanligtvis är en lågriskmetod. De resulterande programmen presterar vanligtvis nästan lika bra som en handskriven version.

    Men om du börjar med ett befintligt program kan det hända att det krävs mycket refaktorisering för att separera de olika beteenden som styrs av modellen så att de kan varieras oberoende. Vi rekommenderar att du utvärderar den här aspekten av programmet när du beräknar kostnaden för projektet.

Konfigurera ditt program från en modell

Om du vill variera programmets beteende vid körning kan du inte använda kodgenerering, vilket genererar källkod innan programmet kompileras. I stället kan du utforma ditt program för att läsa modellen och variera dess beteende i enlighet med detta. Mer information finns i:

  • Anvisningar: Öppna en modell från en fil i programkoden

    Den här metoden kan också tillämpas stegvis, men det finns mer arbete i början. Du måste skriva koden som ska läsa modellen och konfigurera ett ramverk som gör att dess värden kan vara tillgängliga för variabeldelarna. Att göra variabeldelarna generiska är dyrare än kodgenerering.

    Ett allmänt program presterar vanligtvis mindre bra än sina specifika motsvarigheter. Om prestanda är avgörande bör din projektplan innehålla en bedömning av den här risken.

Utveckla en härledd applikation

Du kanske tycker att följande allmänna riktlinjer är användbara.

  • Börja specifikt och generalisera sedan. Skriv en specifik version av programmet först. Den här versionen bör fungera i en uppsättning villkor. När du är nöjd med att det fungerar som det ska kan du få en del av det att härledas från en modell. Utöka de härledda delarna gradvis.

    Du kan till exempel utforma en webbplats som har en specifik uppsättning webbsidor innan du utformar ett webbprogram som presenterar sidor som definieras i en modell.

  • Modellera variantaspekterna. Identifiera de aspekter som varierar, antingen mellan en distribution och en annan, eller över tid när kraven ändras. Det här är de aspekter som ska härledas från en modell.

    Om till exempel uppsättningen webbsidor och länkar mellan dem ändras, men sidornas format och format alltid är desamma, bör modellen beskriva länkarna, men inte behöva beskriva sidornas format.

  • Separata problem. Om variabelaspekterna kan delas in i oberoende områden använder du separata modeller för varje område. Med Hjälp av ModelBus kan du definiera åtgärder som påverkar båda modellerna och begränsningar mellan dem.

    Använd till exempel en modell för att definiera navigering mellan webbsidorna och en annan modell för att definiera sidornas layout.

  • Modellera kravet, inte lösningen. Utforma modellen så att den beskriver användarkraven. Utforma däremot inte notationen enligt implementeringens variabelaspekter.

    Webbnavigeringsmodellen bör till exempel representera webbsidor och hyperlänkar mellan dem. Webbnavigeringsmodellen bör inte representera fragment av HTML eller klasser i ditt program.

  • Vill du generera eller tolka? Om kraven för en viss distribution sällan ändras genererar du programkod från modellen. Om kraven ofta kan ändras, eller om de kan finnas i fler än en variant i samma distribution, skriver du programmet så att det kan läsa och tolka en modell.

    Om du till exempel använder din webbplatsmodell för att utveckla en serie olika och separat installerade webbplatser bör du generera koden för webbplatsen från modellen. Men du använder din modell för att styra en webbplats som ändras varje dag, då är det bättre att skriva en webbserver som läser modellen och presenterar webbplatsen därefter.

  • UML eller DSL? Överväg att skapa din modellerings notation med hjälp av stereotyper för att utöka UML. Definiera en DSL om det inte finns något UML-diagram som passar syftet. Men undvik att bryta standardsemantiken för UML.

    Ett UML-klassdiagram är till exempel en samling rutor och pilar. med denna notation kan du i teorin definiera något. Men vi rekommenderar inte att du använder klassdiagrammet förutom när du faktiskt beskriver en uppsättning typer. Du kan till exempel anpassa klassdiagram för att beskriva olika typer av webbsidor.