Поделиться через


Написание кода для настройки языка для конкретного домена

В этом разделе показано, как использовать пользовательский код для доступа, изменения или создания модели на языке для конкретного домена (DSL).

Контекст написания кода для DSL

Существует несколько контекстов, в которых можно написать код, который работает с DSL:

Хранилище в памяти

Экземпляры классов, определенных в DslDefinition.dsl, хранятся в структуре данных, называемой хранилищем в памяти (IMS) или Store. Классы, определенные в DSL, всегда принимают Store в качестве аргумента конструктора. Например, если dsL определяет класс с именем Example:

Example element = new Example (theStore);

Хранение объектов в Магазине, а не как обычные объекты, обеспечивает несколько преимуществ.

  • Транзакции. Вы можете сгруппировать ряд связанных изменений в транзакцию:

    using (Transaction t = store.TransactionManager.BeginTransaction("updates"))
    {
      // make several changes to Store elements here
      t.Commit();
    }
    

    Если во время изменений возникает исключение, чтобы окончательное Commit() не было выполнено, магазин сбрасывается до предыдущего состояния. Этот подход помогает убедиться, что ошибки не покидают модель в несогласованном состоянии. Дополнительные сведения см. в статье "Навигация и обновление модели" в коде программы.

  • Двоичные связи. Если вы определяете связь между двумя классами, экземпляры в обоих концах имеют свойство, которое переходит к другому концу. Два конца всегда синхронизированы. Например, если вы определяете отношение родительства с ролями с именем "Родители и дети", можно написать следующее:

    John.Children.Add(Mary)

    Оба из следующих выражений теперь имеют значение true:

    John.Children.Contains(Mary)

    Mary.Parents.Contains(John)

    Вы также можете достичь того же эффекта, написав:

    Mary.Parents.Add(John)

    Дополнительные сведения см. в статье "Навигация и обновление модели" в коде программы.

  • Правила и события. Вы можете определить правила, которые выполняются при каждом внесении указанных изменений. Правила используются, например, для поддержания фигур на схеме в актуальном состоянии с элементами модели, которые они присутствуют. Дополнительные сведения см. в статье "Реагирование на изменения" и "Распространение изменений".

  • Сериализация. Магазин предоставляет стандартный способ сериализации объектов, содержащихся в файле. Правила сериализации и десериализации можно настроить. Дополнительные сведения см. в разделе "Настройка файлов служба хранилища и сериализации XML".