Generieren und Konfigurieren der Anwendung aus Modellen
Sie können Teile der Anwendung aus einem Modell generieren oder konfigurieren. Das Modell kann in UML oder ein DSL sein.
Im Modell werden die Anforderungen direkter als im Code dargestellt. Sie können auf geänderte Anforderungen schneller und zuverlässiger reagieren, indem Sie das Verhalten der Anwendung direkt vom Modell ableiten, anstatt den Code zu aktualisieren. Zwar erfordert das Einrichten der Ableitung zunächst einen gewissen Arbeitsaufwand, diese Investition zahlt sich jedoch aus, wenn Sie Änderungen an den Anforderungen erwarten oder wenn mehrere Varianten des Produkts erstellt werden sollen.
Generieren des Codes für die Anwendung aus einem Modell
Code kann am einfachsten mit Textvorlagen generiert werden. Sie können Code in der gleichen Visual Studio-Projektmappe generieren, in der sich das Modell befindet. Weitere Informationen finden Sie in folgenden Themen:
Diese Methode kann einfach inkrementell übernommen werden. Beginnen Sie mit einer Anwendung, die nur für einen bestimmten Fall funktioniert, und wählen Sie einige Teile davon aus, die vom Modell abweichen sollen. Benennen Sie die Quelldateien dieser Teile um, sodass Sie über Textvorlagendateien (.tt) verfügen. An diesem Punkt werden die CS-Quelldateien automatisch aus den Vorlagendateien generiert, sodass die Anwendung weiterhin wie zuvor ausgeführt werden kann.
Ersetzen Sie anschließend einen Teil des Codes durch einen Textvorlagenausdruck, der das Modell liest und diesen Teil der Quelldatei generiert. Mindestens ein Wert des Modells sollte die ursprüngliche Quelle generieren, damit Sie die Anwendung erneut ausführen können und diese wie zuvor funktioniert. Nachdem Sie verschiedene Modellwerte getestet haben, können Sie Vorlagenausdrücke für einen anderen Teil des Codes einfügen.
Dank dieser inkrementellen Methode erfolgt die Codegenerierung in der Regel mit geringem Risiko. Die auf diese Weise erstellten Anwendungen verhalten sich gewöhnlich wie eine von Hand geschriebene Version.
Wenn Sie jedoch mit einer vorhandenen Anwendung beginnen, sind möglicherweise viele Umgestaltungen erforderlich, um die verschiedenen vom Modell gesteuerten Verhaltensweisen zu trennen und diese separat ändern zu können. Es wird empfohlen, diesen Aspekt der Anwendung zu bewerten, wenn Sie die Kosten für das Projekt schätzen.
Konfigurieren der Anwendung aus einem Modell
Wenn Sie das Verhalten der Anwendung zur Laufzeit ändern möchten, können Sie keine Codegenerierung verwenden, bei der Quellcode generiert wird, bevor die Anwendung kompiliert wird. Stattdessen können Sie die Anwendung so entwerfen, dass das UML- oder DSL-Modell gelesen und sein Verhalten entsprechend angepasst wird. Weitere Informationen finden Sie in folgenden Themen:
Diese Methode kann auch inkrementell übernommen werden. Dies erfordert zu Beginn jedoch einen größeren Arbeitsaufwand. Sie müssen den Code schreiben, mit dem das Modell gelesen wird, und ein Framework einrichten, auf dessen Werte die variablen Teile zugreifen können. Das Erstellen generischer variabler Teile ist aufwändiger als eine Codegenerierung.
Eine generische Anwendung verhält sich in der Regel weniger optimal als deren spezifische Entsprechung. Wenn die Leistung entscheidend ist, sollte dieses Risiko im Projektplan berücksichtigt werden.
Entwickeln einer abgeleiteten Anwendung
Die folgenden allgemeinen Richtlinien können hilfreich sein.
Beginnen Sie spezifisch und werden Sie allgemeiner. Schreiben Sie zunächst eine spezifische Version der Anwendung. Diese Version sollte für einen Satz von Bedingungen funktionieren. Wenn die Version ordnungsgemäß funktioniert, können Sie Teile davon von einem Modell ableiten. Erweitern Sie nach und nach die abgeleiteten Teile.
Entwerfen Sie z. B. eine Website, die über einen bestimmten Satz von Webseiten verfügt, bevor Sie eine Webanwendung entwerfen, die den in einem Modell definierten Seiten entspricht.
Modellieren Sie die veränderlichen Aspekte. Identifizieren Sie die Aspekte, die sich entweder zwischen Bereitstellungen oder im Lauf der Zeit mit den Anforderungen ändern. Diese Aspekte sollten von einem Modell abgeleitet werden.
Wenn sich beispielsweise der Satz von Webseiten und die Links zwischen diesen Webseiten ändern, das Format und der Stil der Seiten jedoch beibehalten werden, sollte das Modell die Links beschreiben, nicht jedoch das Format der Seiten.
Separate Aspekte. Wenn die variablen Aspekte in unabhängige Bereiche unterteilt werden können, verwenden Sie für die einzelnen Bereiche separate Modelle. Mit "ModelBus" können Sie Vorgänge definieren, die sich sowohl auf die Modelle als auch auf die Einschränkungen zwischen diesen auswirken.
Sie können z. B. ein Modell für die Definition der Navigation zwischen den Webseiten und ein weiteres Modell für die Definition des Layouts der Seiten verwenden. Weitere Informationen finden Sie unter Gewusst wie: Integrieren von UML-Modellen in andere Modelle und Tools.
Modellieren Sie die Anforderung, nicht die Lösung. Entwerfen Sie die DSL, oder passen Sie die UML an, damit diese die Benutzeranforderungen beschreiben. Entwerfen Sie jedoch nicht die Notation anhand der variablen Aspekte der Implementierung.
Das Webnavigationsmodell sollte z. B. die Webseiten und die Links zwischen diesen darstellen. Das Webnavigationsmodell sollte keinen HTML-Fragmenten oder Klassen der Anwendung entsprechen.
Generieren oder interpretieren? Wenn sich die Anforderungen für eine bestimmte Bereitstellung selten ändern, generieren Sie den Programmcode aus dem Modell. Wenn sich die Anforderungen häufig ändern oder in mehr als einer Variante der gleichen Bereitstellung gleichzeitig vorhanden sein können, schreiben Sie die Anwendung so, dass diese ein Modell lesen und interpretieren kann.
Wenn Sie beispielsweise mithilfe des Websitemodells eine Reihe von unterschiedlichen und separat installierten Websites entwickeln, sollten Sie den Code für die Site aus dem Modell generieren. Wenn Sie Ihr Modell jedoch zur Steuerung einer Site verwenden, die sich täglich ändert, sollten Sie einen Webserver schreiben, der das Modell liest und die Site entsprechend darstellt.
UML oder DSL? Erstellen Sie die Modellierungsnotation mit Stereotypen, um UML zu erweitern. Definieren Sie eine DSL, wenn kein geeignetes UML-Diagramm vorhanden ist. Brechen Sie jedoch nicht die UML-Standardsemantik auf.
Bei einem UML-Klassendiagramm handelt es sich z. B. um eine Auflistung von Feldern und Pfeilen. Mit dieser Notation können Sie theoretisch alles definieren. Es wird jedoch empfohlen, dieses Klassendiagramm nur dort zu verwenden, wo Sie tatsächlich einen Typensatz beschreiben. So können Sie z. B. Klassendiagramme anpassen, um verschiedene Webseitentypen zu beschreiben.
Siehe auch
Konzepte
Generieren von Code zur Entwurfszeit mithilfe von T4-Textvorlagen
Weitere Ressourcen
Gewusst wie: Generieren von Dateien aus einem UML-Modell
Gewusst wie: Lesen eines UML-Modells im Programmcode
Generieren von Code für eine domänenspezifische Sprache
Gewusst wie: Öffnen eines Modells aus einer Datei im Programmcode