Jag vet inte vad jag ska göra. 0 0 © 2 0 0 3 I E E E både modell- och kodnivåer. 1 Mallen abstraktion vi föreslår låter oss modellera applikationer som hierarkiska sammansättningar av mallar. Vi illustrerar vår kompositionsprocess med hjälp av en enhetlig metamodell. MDD syftar till att flytta fokus på programvaruutveckling från kodning till modellering. Applikationsutveckling inleds med en abstrakt specifikation A, som ska omvandlas till ett konkret genomförande C på en målarkitektur, som figur 1a visar. 2 Målarkitekturen är vanligtvis skiktad, med varje lager som representerar en vy av systemet. Modellering tillvägagångssätt konstruerar A med hjälp av olika abstrakta vyer A 1... A n, var och en definiera en uppsättning egenskaper som motsvarar den oro det modellerar. En vy, A i, är ett exempel på en mer allmän struktur som vi kan representera som en (meta)modell M i, såsom användarinteraktion modell för sekvenser av användarsysteminteraktioner, eller en enhet-relationsmodell för att representera data. A är vanligtvis inte tillgänglig separat: Vi använder det här för att representera sammansättningen av vyerna A 1... A n. Vi kan omvandla varje A i till C i, med tillämpningsnivå sammansättning av C 1... C n ger C den avsedda genomförandet av A. I stället för att genomföra en sådan omvandling för varje fokusering Separation av intressen i modellutveckling T o underlättar spårbarhet, återanvändning och utveckling, bör systemen specificeras som sammansättningar av tydligt åtskilda och separat specificerade intressen. Anpassa modelldrivna utvecklingsmiljöer-till exempel för att stödja olika tillämpningsdesign strategier-är svårt eftersom de saknar stöd för tydlig separation av problem. Dessutom, eftersom vi vanligtvis specificerar MDD-system i termer av modeller och kod, måste vi ta itu med frågan om separation av problem vid modelldriven utveckling Modelldriven utveckling har förbättrat produktivitet, kvalitet och plattformsoberoende, men det har inte varit så framgångsrikt att stödja återanvändning och systemutveckling. Den föreslagna mallabstractionen tar upp detta problem på ett integrerat sätt genom att hantera separation av problem på både modell- och kodnivå. applikation manuellt, vi använder M i, varav A i är en instans, och genomföra generiska transformationer på modellnivå. Vi kan tillämpa dessa omvandlingar på alla fall av M i. Att definiera transformationer på nivån M i snarare än A i gör det möjligt att skala upp metoden för att hantera stora program. Till exempel kan vi specificera en omvandling från ett klassdiagram till Java klasser och sedan tillämpa denna omvandling för att generera Java klasser för alla program. Figur 1b visar en typisk affärsapplikation modellerad enligt MDD. Applikationen genomförs genom tre arkitekturlager-användargränssnitt, applikationsfunktionalitet och databas-var och en på en annan plattform som stöder olika primitiva. Till exempel användargränssnitt plattformar såsom Visual Basic ger fönster och kontroller som implementation primitiver. Applikationslogiken implementeras i ett Java-liknande programmeringsspråk med klasser och metoder som primitiva, och databasskiktet är byggt i ett relationsdatabassystem med hjälp av tabeller och kolumner. De tre skikten kombineras sedan för att få en implementering C. Varje lager måste ta itu med flera problem, till exempel: I GUI-lagret måste behandla ett standard utseende och känsla över skärmar, standard användarinteraktionsmönster, och kartläggning av fönsterkontroller till programklasser. I Funktionslagret måste adressera felhantering och loggning. I Databasskiktet måste ta upp överensstämmelse, revision och låsning. Varje fråga bör specificeras i en modellering som är bäst lämpad för dess uttryck. En UML förlängning kan vara lämplig, som en profil eller variant, där standard UML notations är otillräckliga. Ett parameteriserat paket är ett parametriskt modellelement som fångar mönster av återkommande struktur, beteende och begränsningar av modeller. Vi skapar parameteriserade paket med hjälp av paketförlängningsmekanismen. Modellelement levereras som parametrar till paketet, paketet skapar en uppsättning nya modellelement. Vår mall abstraktion använder parameteriserad paket abstraktion 4 för att ta itu med den separata specifikationen och sammansättningen av modellmönster, och aspekt-orienterad programmering 5 för att ta itu med separation av problem på kodnivå. Figur 2 visar mallmetamodellen, som uttrycker hur en problemspecifikation omvandlas till modeller och kod. Det finns två typer av mallar: en bladmall och en sammansatt mall. Leaf-mallens instantieringsspecifikation anger hur man skapar problemspecifika modellelement, och dess omvandlingsspecifikation anger hur den instanterade modellen omvandlas till plattformsspecifik kod. Den sammansatta mallens instantieringsspecifikation anger hur modellelement konstruerade i medlemmar Mallar slås samman (vävda tillsammans); vi har funnit att sammanfogning-för-namn system av modell sammanslagning har fungerat bra för våra syften. För att ange transformationer kan du använda alla modellaware transformationsspråk; vi använde SpecL. 6 Mallens vävande specifikation anger hur koden som genererats av dess medlem Mallar slås samman; en kod-weaving specifikation språk i linje med Hyper/J 7 har varit tillräckligt för oss. Vi sammanställer ansökningar genom att göra en postorder traversal av Mallhierarkin i tre sekventiella steg: 1. Instantiation: stampar ut modeller och slår ihop dem 2. Transformation: omvandlar modeller till kod och genererar vävning specifikationer för att komponera den genererade kod 3. Vävning: komponerar de genererade kodfragmenten genom att bearbeta de vävande specifikationerna Denna process låter oss ange applikationer som hierarkiska sammansättningar av mallar av intresse.  Ett exempel Den här mallen anger en objektrelationell karteringsstrategi för en ihållande klass. Instanteringsspecifikation. För en indataklass Cl som har sin isPersistent egenskap inställd på True, bör det finnas I A tabell T med samma namn som klassen Cl I A nyckel K med samma namn som klassen Cl I A kartorTill samband mellan T och Cl I E E E S O F T W A R E h t t t p : / / c o m p u t e r. o r g / s o f t w a r e Denna mall anger hur man upprätthåller en ihållande verifieringskedja av tillståndsändringar av fall av en ihållande klass. Varje ihållande klass har en motsvarande granskningstabell med en kolumn för att lagra tidsstämpeln för statsbytesoperationen, en kolumn för att lagra förbilden och en kolumn för att lagra postbilden. Dessutom har varje persistent klass tre metoder: getImage får objektets aktuella bild, setPreImage anger den aktuella bilden som förbild i granskningstabellen, och setPostImage anger den aktuella bilden som postimage i granskningstabellen. Klass isPersistent ärAuditable Operation Parametertyp BasicType Table Column Denna mall anger, i sin omvandlingsspecifikation, hur UML-klassmodellen översätts till Java. Denna mall anger en attributhanteringsstrategi för inmatningsklassen. Varje attribut av en klass har en Accessor metod för att läsa attributet och en Mutator metod (när dess ärQuery egenskap är inställd på falskt) för att ställa in attributet. Denna sammansatta mall anger hur man sammanfogar de instanterade modellerna av objektrelationskartan och revisionsmallarna och hur man väver koden de genererar. Instanteringsspecifikation. Denna malls instantieringsspecifikation anger sammanslagning av de modeller som skapats av dess medlemmar Mallar med hjälp av sammanfogning-för-namn-strategin. Omvandlingsspecifikation. Om den Persistenta egenskapen hos ingångsklassen är inställd på True, genereras en vävspecifikation för montering av modulmetoden med GetImage följt av SetPreImage på ena sidan av fästet och med GetImage följt av SetPostImage på andra sidan fästet. Denna malls instantieringsspecifikation anger sammanslagning av de modeller som skapats av dess medlemmar Mallar med hjälp av strategin för sammanfogning för namn. Denna malls instantieringsspecifikation anger också sammanslagning av de modeller som skapats av dess medlemmar Mallar med hjälp av strategin för sammanfogning för namn. Som ett exempel på kompositionsprocessen, låt oss titta på ett urval ingång klass som heter Person. För brist på utrymme anser vi att endast det underträd som är rotat i Persistensmallen som visas i figur 4. Från och med en modell som innehåller en enda persistent auditable klass Person med attribut ssn och namn, direktionering av objekt-relationskarta Mall producerar tabellen och operationer markerade "[O]" i figur 5. Direktionering av revisionsmallen producerar tabellen och verksamheten märkt "[A]". Figur 5 visar bidraget varje mall Figur 3 som består av klasser och attribut, vi kan fylla resten av modellen med hjälp av en mall direktion; vi kan generera drift organ för databasfrågor och så vidare med Mall transformation. Denna föreslagna mekanism stöder vävning, så att vi kan separera mallarna för att hantera uthållighet och revision, tillämpa dem separat, och sedan slå samman resultaten för att producera en helt befolkad modell. W e och våra kolleger använde den strategi som presenteras här för att omorganisera en MDD-miljö. 6, 8 Omorganisationen underlättade enkel anpassning och ökad återanvändning mellan verktygsvarianter. Tydlig åtskillnad av farhågor ledde till bättre spårbarhet från krav till genomförande, vilket ledde till bättre förändringshantering. Använda en högre nivå modell-medveten omvandling språk förenklat verktyg underhåll och utveckling. Det föreslagna tillvägagångssättet tar inte upp problemet med sammansättningens korrekthet fullt ut. Mallbegränsningar och typkontroll löser delvis problemet. Att säkerställa att mallsammansättningen är korrekt ligger fortfarande till stor del hos användaren, men vi undersöker metoder för att berika mallabstractionen med semantik för att ge mer kontroll. Vi planerar också att höja omvandlingsspecifikationerna till modellnivå för att ge en ännu bättre hantering av anpassningsbarhet och förändringshantering. För mer information om detta eller något annat dataämne, besök vårt digitala bibliotek på http://computer.org/publications/dlib. S e p t e m b e r / O c t o b e r 2 0 0 3 I E
För att ta itu med frågorna om utvecklingsinsatser och plattformsberoende utformning har MDD föreslagits.
Separation of concerns in model-driven development
{'venue': 'IEEE Software', 'journal': 'IEEE Software', 'mag_field_of_study': ['Computer Science']}