Udostępnij za pośrednictwem


Generowanie i konfigurowanie aplikacji na podstawie modeli

Możesz wygenerować lub skonfigurować części aplikacji na podstawie modelu.

Model reprezentuje wymagania bardziej bezpośrednio niż kod. Wyprowadzając zachowanie aplikacji bezpośrednio z modelu, można znacznie szybciej i niezawodnie reagować na zmienione wymagania niż przez zaktualizowanie kodu. Mimo że do skonfigurowania wyprowadzenia wymagane są pewne wstępne prace, ta inwestycja jest zwracana, jeśli spodziewasz się zmian w wymaganiach lub jeśli planujesz wprowadzić kilka wariantów produktu.

Generowanie kodu aplikacji na podstawie modelu

Najprostszym sposobem generowania kodu jest użycie szablonów tekstu. Kod można wygenerować w tym samym rozwiązaniu programu Visual Studio, w którym zachowasz model. Aby uzyskać więcej informacji, zobacz:

  • Generowanie kodu czasu projektowania przy użyciu szablonów tekstowych T4

  • Generowanie kodu z języka specyficznego dla domeny

    Ta metoda jest łatwa do zastosowania przyrostowo. Zacznij od aplikacji, która działa tylko dla konkretnego przypadku, i wybierz kilka części, które mają się różnić od modelu. Zmień nazwy plików źródłowych tych części, aby stały się plikami szablonu tekstowego (tt). W tym momencie źródłowe pliki cs zostaną automatycznie wygenerowane na podstawie plików szablonu, więc aplikacja będzie działać tak, jak wcześniej.

    Następnie możesz wziąć jedną część kodu i zastąpić go wyrażeniem szablonu tekstowego, które odczytuje model i generuje część pliku źródłowego. Co najmniej jedna wartość modelu powinna wygenerować oryginalne źródło, aby można było ponownie uruchomić aplikację i będzie działać tak jak poprzednio. Po przetestowaniu różnych wartości modelu możesz przejść do wstawiania wyrażeń szablonu w innej części kodu.

    Ta metoda przyrostowa oznacza, że generowanie kodu jest zwykle podejściem o niskim ryzyku. Wynikowe aplikacje zwykle wykonują niemal i ręcznie napisaną wersję.

    Jeśli jednak zaczniesz od istniejącej aplikacji, może się okazać, że do oddzielenia różnych zachowań podlegających modelowi wymagane jest wiele refaktoryzacji, aby można było je niezależnie zmieniać. Zalecamy ocenę tego aspektu aplikacji podczas szacowania kosztów projektu.

Konfigurowanie aplikacji na podstawie modelu

Jeśli chcesz zmienić zachowanie aplikacji w czasie wykonywania, nie można użyć generowania kodu, które generuje kod źródłowy przed skompilowanie aplikacji. Zamiast tego możesz zaprojektować aplikację, aby odczytać model i odpowiednio zmienić jego zachowanie. Aby uzyskać więcej informacji, zobacz:

  • Instrukcje: Otwieranie modelu z pliku w kodzie programu

    Tę metodę można również stosować przyrostowo, ale na początku jest więcej pracy. Musisz napisać kod, który odczytuje model, i skonfigurować strukturę, która umożliwia jej wartościom dostęp do części zmiennych. Tworzenie ogólnych części zmiennych jest droższe niż generowanie kodu.

    Aplikacja ogólna zwykle działa mniej dobrze niż jej konkretne odpowiedniki. Jeśli wydajność ma kluczowe znaczenie, plan projektu powinien obejmować ocenę tego ryzyka.

Tworzenie aplikacji pochodnej

Przydatne mogą być następujące ogólne wskazówki.

  • Rozpocznij określoną, a następnie uogólnij. Najpierw napisz określoną wersję aplikacji. Ta wersja powinna działać w jednym zestawie warunków. Jeśli masz pewność, że działa prawidłowo, możesz utworzyć część z nich pochodzącą z modelu. Stopniowo rozszerzaj pochodne części.

    Na przykład zaprojektuj witrynę internetową zawierającą określony zestaw stron internetowych przed zaprojektowaniem aplikacji internetowej, która przedstawia strony zdefiniowane w modelu.

  • Modelowanie aspektów wariantu. Zidentyfikuj aspekty, które będą się różnić, między jednym wdrożeniem a innym, lub w miarę upływu czasu w miarę zmiany wymagań. Są to aspekty, które powinny pochodzić z modelu.

    Jeśli na przykład zestaw stron internetowych i łączy między nimi ulegnie zmianie, ale styl i format stron są zawsze takie same, model powinien opisywać linki, ale nie musi opisywać formatu stron.

  • Oddzielne obawy. Jeśli aspekty zmiennych można podzielić na niezależne obszary, należy użyć oddzielnych modeli dla każdego obszaru. Za pomocą modelu ModelBus można zdefiniować operacje, które mają wpływ zarówno na modele, jak i ograniczenia między nimi.

    Na przykład użyj jednego modelu, aby zdefiniować nawigację między stronami internetowymi a innym modelem w celu zdefiniowania układu stron.

  • Wymodeluj wymaganie, a nie rozwiązanie. Zaprojektuj model tak, aby opisywał wymagania użytkownika. Natomiast nie projektuj notacji zgodnie ze zmiennymi aspektami implementacji.

    Na przykład model nawigacji internetowej powinien reprezentować strony internetowe i hiperlinki między nimi. Model nawigacji internetowej nie powinien reprezentować fragmentów kodu HTML ani klas w aplikacji.

  • Generuj lub interpretuj? Jeśli wymagania dotyczące określonego wdrożenia rzadko się zmienią, wygeneruj kod programu na podstawie modelu. Jeśli wymagania mogą się często zmieniać lub mogą współistnieć w więcej niż jednym wariantie w tym samym wdrożeniu, zapisz aplikację, aby mogła odczytywać i interpretować model.

    Jeśli na przykład używasz modelu witryny internetowej do tworzenia serii różnych i oddzielnie zainstalowanych witryn internetowych, należy wygenerować kod witryny na podstawie modelu. Jednak używasz modelu do kontrolowania witryny, która zmienia się każdego dnia, lepiej jest napisać serwer internetowy, który odczytuje model i odpowiednio przedstawia witrynę.

  • UML lub DSL? Rozważ utworzenie notacji modelowania przy użyciu stereotypów w celu rozszerzenia języka UML. Zdefiniuj język DSL, jeśli nie ma diagramu UML, który pasuje do celu. Należy jednak unikać łamania standardowej semantyki UML.

    Na przykład diagram klas UML to kolekcja pól i strzałek; z tą notacją można teoretycznie zdefiniować wszystko. Nie zalecamy jednak używania diagramu klas, z wyjątkiem sytuacji, w których w rzeczywistości opisano zestaw typów. Można na przykład dostosować diagramy klas do opisywania różnych typów stron internetowych.