Написание кода для настройки доменного языка
В данном разделе, показывается, как использовать пользовательский код для доступа, изменить или создать модель в доменном языке.
Количество контекстов, в которых можно писать код, который работает с DSL:
Пользовательские команды. Можно создать команда, пользователи могут вызвать, щелкнув правой кнопкой мыши на схеме, и, который может изменять модель.Дополнительные сведения см. в разделе Практическое руководство. Добавление команды в контекстное меню.
Проверку. Можно написать код, проверяющий, что модель в правильном состоянии.Дополнительные сведения см. в разделе Проверка в доменных языках.
Переопределение по умолчанию применяются расширения функциональности. Можно изменять многие аспекты кода, сформированного из DslDefinition.dsl.Дополнительные сведения см. в разделе Переопределение и расширение созданных классов.
Преобразование текста. Можно написать текстовые шаблоны, содержащие код, обращающийся к модели и создает текстовый файл, например для создания программного кода.Дополнительные сведения см. в разделе Создание кода из доменного языка.
другие расширения Visual Studio. Можно написать отдельные расширения VSIX, которые считывают и изменять модели.Дополнительные сведения см. в разделе Практическое руководство. Открытие модели из файла в коде программы.
Экземпляры классов, определенных в DslDefinition.dsl располагаются в структуре данных Хранилище данных в памяти (IMS) или Хранилище.Классы, заданные в DSL всегда принимают хранилище в качестве аргумента конструктору.Например, если DSL определяет класс с именем Примере:
Example element = new Example (theStore);
хранения объектов в хранилище (а не просто как обычные объекты) предоставляет несколько преимуществ.
Транзакции.Можно группировать ряд связанных изменений в транзакцию.
using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
{
// make several changes to Store elements here
t.Commit();
}
Если исключение возникает в процессе изменений, чтобы не будет выполнена финальная фиксация (), хранилище будет сброшен на свое предыдущее состояние.Это позволяет убедиться в том, что ошибки не оставляют модель в несогласованном состоянии.Дополнительные сведения см. в разделе Перемещение по модели и обновление модели в коде программы.
Двоичные связи.Если указать связь между классами, 2 экземпляров на обоих концах имеют свойство, которое переходит к другому концу.2 Конца всегда синхронизированы.Например, если связь определена родительства с именами ролей с родительским элементом и потомками, то можно написать:
John.Children.Add(Mary)
Теперь оба следующих выражений условий:
John.Children.Contains(Mary)
Mary.Parents.Contains(John)
Также можно добиться такого же эффекта написать:
Mary.Parents.Add(John)
Дополнительные сведения см. в разделе Перемещение по модели и обновление модели в коде программы.
правила и события.Можно определить правила, которые возникают при внесении определенных изменений.Используются правила, например хранить фигуры на схеме последним с элементами модели, которые они представляют.Дополнительные сведения см. в разделе Реагирование на изменения и их распространение.
Сериализация.Хранилище предоставляет стандартный способ сериализации объектов в нем содержится в файл.Можно настраивать правила для сериализации и десериализации.Дополнительные сведения см. в разделе Настройка хранилища файлов и XML-сериализации.