Практическое руководство. Создание кода из UML-схем классов
В Visual Studio Ultimate можно создать код из UML-схем классов с помощью команды Создать код. По умолчанию команда создает тип C# для каждого типа UML, который был выбран.Это поведение можно изменить и расширить, изменив или скопировав текстовые шаблоны для создания кода.Можно задать другое поведение для типов, которые содержатся в разных пакетах модели.
Команда Создать код хорошо подходит для создания кода из выбранных пользователем элементов и создания отдельных файлов для каждого UML-класса или другого элемента.Например, на снимке экрана показаны два файла C#, созданные из двух UML-классов.
Кроме того, если требуется создать код, в котором сформированные файлы не находятся в отношении 1:1 с UML-элементами, имеет смысл создать текстовые шаблоны, которые вызываются командой Преобразовать все шаблоны.Дополнительные сведения об этом методе см. в разделе Практическое руководство. Создание файлов из модели UML.
Дополнительные сведения о UML-схемах классов в Visual Studio Ultimate см. в следующих разделах:
Использование команды создания кода
Следующая процедура описывает поведение команды Создать код по умолчанию:
Создание отдельного файла для каждого элемента
Создайте UML-модель, содержащую классы.Возможно, потребуется применить к элементам модели стереотипы.
Дополнительные сведения см. в разделе Преобразования создания кода по умолчанию.
На схеме классов или в окне Обозреватель моделей UML выберите элементы, из которых требуется создать код.Можно выбрать один из следующих вариантов:
Конкретный набор элементов.
Пакет или модель для создания кода из содержимого пакета или модели.
Схема, на которой можно выбрать все элементы.
Откройте контекстное меню для выбранного элемента, а затем выберите Создать код.
При первом использовании команды Создать код в определенной модели отобразится диалоговое окно.Это диалоговое окно позволяет изменять параметры создания кода модели.
Если не требуется изменять никакие параметры, нажмите кнопку ОК.
Чтобы вернуться к этому диалоговому окну позже, откройте контекстное меню схемы и выберите Настроить параметры создания кода по умолчанию.Дополнительные сведения см. в разделе Настройка команды создания кода.
Создаются файлы, содержащие код C#.В сценарии по умолчанию для каждого типа создается отдельный файл. Такие файлы создаются в проекте библиотеки классов C#.Однако можно выполнить пользовательскую настройку такого поведения.Дополнительные сведения см. в разделе Настройка команды создания кода.
С моделью выполняются некоторые проверочные тесты, позволяющие убедиться, что модель можно преобразовать в C#.Если модель не проходит тесты, отображается сообщение об ошибке, создание кода не выполняется.Если была создана команда меню проверки, код создается только для элементов, успешно прошедших такую проверку.Дополнительные сведения см. в разделе Практическое руководство. Определение ограничений проверки для моделей UML.
Преобразования создания кода по умолчанию
В этом разделе дается сводное описание результатов выполнения команды Создать код в случаях, когда пользовательская настройка команды не выполнялась.Дополнительные сведения см. в разделе Настройка команды создания кода.
Для каждого выбранного в UML-модели типа создается один тип C#.Каждый тип помещается в отдельный файл кода в папке GeneratedCode.
Если UML-тип содержится в пакете, созданный тип C# помещается в пространство имен, а файл создается в папке, имя которой совпадает с именем пространства имен.
Свойство C# создается для каждого атрибута Attribute UML-класса.
Метод C# создается для каждой операции Operation UML-типа.
Поле C# создается для каждой ассоциации с возможностью перехода, в которой участвует класс.
Добавление стереотипов в каждый UML-тип позволяет контролировать больше свойств созданного типа C#.
Создание типа C# |
Использование UML-типа |
Применение стереотипа |
---|---|---|
Класс |
Класс |
<нет> или класс C# |
Интерфейс |
Интерфейс |
<нет> или интерфейс C# |
Перечисление |
Перечисление |
<нет> или C# enum |
Делегат |
Класс |
делегат C# |
Структура |
Класс |
C# struct |
Задание стереотипа в типе или другом элементе
Откройте контекстное меню для элементов на схеме или в Обозреватель моделей UML, а затем выберите Свойства.
В окне Свойства щелкните стрелку раскрывающегося списка для свойства Стереотипы и установите флажок напротив стереотипа, который требуется применить.
Совет Если стереотипы C# не отображаются, включите профиль C# для модели или пакета, содержащего нужные элементы модели.В окне Обозреватель моделей UML выберите пакет или корень модели.Затем в окне Свойства выберите Профиль и включите профиль C#.
Разверните свойство Стереотипы, чтобы просмотреть дополнительные свойства, которые можно задать.
Свойства Описание для типов, атрибутов, операций и ассоциаций записываются в комментарии <summary> в созданном коде.Элементы комментариев, связанные с типами, записываются в комментарии <remarks>.
Варьирование созданного кода
Созданный код варьируется в зависимости от свойств каждого типа, атрибута или операции.Например, если присвоить свойству класса Абстрактный значение true, в созданном классе будет отображаться ключевое слово abstract.Если присвоить свойству атрибута Кратность значение 0..*, созданное свойство будет иметь тип IEnumerable<>.
Кроме того, каждый стереотип предоставляет несколько дополнительных свойств, которые можно задать.Эти значения преобразуются в соответствующие ключевые слова в коде C#.Например, если задать значения для свойства Is Static в классе, класс C# будет static.
Чтобы задать эти дополнительные свойства, выберите класс или другой элемент на схеме.В окне "Свойства" разверните узел Стереотипы, затем разверните стереотип C#, например Класс C#.Для классов такие дополнительные свойства включают:
CLR-атрибуты
Является разделенным
Является статическим
Является небезопасным
Видимость пакета
Каждый атрибут и операция имеет свойства стереотипа, которые можно задать.Если свойства не отображаются в новом атрибуте, выполните команду Создать код.
Пользовательская настройка команды "Создать код"
Команда Создать код функционирует, преобразуя элементы модели с использованием набора текстовых шаблонов.Дополнительные сведения о текстовых шаблонах см. в разделе Создание кода и текстовые шаблоны T4.
Шаблоны задаются с использованием набора привязок текстовых шаблонов.Привязка текстового шаблона задает, какой шаблон нужно применить и где разместить созданные выходные данные, а также указывает другие параметры команды Создать код.
При первом выполнении команды Создать код в определенной модели к корню модели прикрепляется набор привязок шаблонов по умолчанию.Эти привязки применимы ко всем элементам модели.
Однако набор этих привязок по умолчанию можно переопределить и расширить, прикрепив пользовательские привязки к пакетам, классам или другим элементам.Привязка применима ко всем элементам, которые содержатся внутри элемента, к которому прикреплена привязка.Например, если требуется преобразовать все типы внутри определенного пакета с использованием другого набора шаблонов или сохранить выходные данные в другой папке, можно прикрепить к пакету привязки шаблонов.
Чтобы проверить привязки шаблонов, прикрепленные к элементу модели, выберите многоточие [...] в свойстве Привязки текстовых шаблонов в окне "Свойства".
Команда Создать код применяет шаблоны к каждому выбранному элементу модели.Применяемым набором шаблонов для каждого элемента является совокупный набор шаблонов, прикрепленный к контейнерам элемента, вплоть до корня модели и включая его.
Если две привязки шаблонов в этом наборе имеют одно и то же имя, привязка в более мелком контейнере переопределяет привязку в более крупном.Например, корень модели имеет привязку с именем Class Template.Чтобы применить собственный шаблон к содержимому определенного пакета, определите собственную привязку шаблонов с именем Class Template.
К элементу модели можно применить несколько шаблонов.Из каждого элемента модели можно создать несколько файлов.
Примечание |
---|
Привязки, прикрепленные к корню модели, выполняют функции привязок по умолчанию для всех элементов модели.Чтобы просмотреть эти привязки по умолчанию, откройте контекстное меню для поверхности схемы и выберите Настроить параметры создания кода по умолчанию.Кроме того, можно выбрать корень модели в обозревателе моделей UML, а затем выбрать многоточие ([…]) в свойстве Привязки текстовых шаблонов.Привязки не отобразятся, пока команда Создать код не будет использована хотя бы однократно.Привязки шаблонов невозможно прикрепить к схеме. |
Прикрепление привязок текстовых шаблонов к пакету или другому элементу модели
В Обозревателе моделей UML откройте контекстное меню для элемента модели, а затем выберите Свойства.Как правило, привязки текстовых шаблонов прикрепляются к пакету или к корню модели.
В поле Свойства, нажмите кнопку с многоточием ([…]) рядом с свойством Привязки шаблонов текста.
Откроется диалоговое окно Привязки текстовых шаблонов.
Выберите Добавить, чтобы создать новую привязку текстовых шаблонов.
- или -
Выберите существующую привязку, чтобы редактировать ее.
Каждая привязка шаблонов определяет способ применения заданного шаблона к выбранному элементу модели и другим элементам модели, которые в нем содержатся.
В диалоговом окне задайте свойства привязки текстовых шаблонов.
Свойство
Описание
Имя
Имя данной привязки.Чтобы переопределить привязку, наследованную от содержащего элементы пакета или модели, используйте имя, совпадающее с именем привязки, которую требуется переопределить.
Перезаписать
Если это свойство имеет значение true, существующий код перезаписывается.
Целевое имя
Имя создаваемого файла.
В эту строку можно вставлять выражения, такие как {Имя} или {Имя.Владельца}.Например, можно написать: {Имя.Владельца}_{Имя}.Выражение оценивается в элементе модели.Оно может использовать свойства элементов, но не его методы.Чтобы узнать, какие свойства можно использовать, просмотрите свойства типов в Microsoft.VisualStudio.Uml.*.
Важно{Имя} или {Имя.Владельца} можно использовать только в свойстве Целевое имя.Чтобы изменить имя созданного класса, необходимо изменить шаблон.Дополнительные сведения см. в разделе Создание текстового шаблона.Путь проекта
Задает путь к проекту Visual Studio, в котором будут содержаться выходные файлы преобразования.Для создания нового проекта используйте типизированные значения.Нажмите кнопку с многоточием ([…]), чтобы выбрать существующий проект.
Если проекта не существует, будет создан новый проект.Это будет проект библиотеки классов C#.
Для этого необходимо указать проект напрямую.Можно включить макрос переменной среды, такой как %ProgramFiles% или %LocalAppData%.
Конечный каталог
Папка, в которой создается целевой файл.Путь является относительным по отношению к папке проекта.
Можно воспользоваться выражением {PackageStructure}, чтобы вставить путь, соответствующий именам содержащих элементы пакетов.Значение по умолчанию — \GeneratedCode\{PackageStructure}.Кроме того, можно включить переменные среды, например %TEMP% или %HomePath%.
Важно{Структура_пакета} может использоваться только в свойстве Целевой каталог.Путь к файлу шаблона
Шаблон, который будет выполнять преобразование.
Можно использовать предоставленные шаблоны или создать свой собственный.Предоставленные шаблоны можно найти в следующем местоположении:
…\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\
К элементу можно прикрепить любое количество привязок.
Написание текстового шаблона
Можно создать собственные текстовые шаблоны.Текстовые шаблоны позволяют создавать программный код или текстовые файлы любого другого вида.
Рекомендуется начать с изменения копий стандартных шаблонов.Можно копировать шаблоны из следующих местоположений:
…\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text\
Сведения о текстовых шаблонах см. в следующих разделах.
Текстовый шаблон — это прототип получаемого файла, который содержит текст и программный код, выполняющий считывание модели.Дополнительные сведения см. в разделе Создание кода и текстовые шаблоны T4.
Для осуществления перехода по UML-модели в программном коде необходимо использовать API-интерфейс UML.Дополнительные сведения см. в разделах Практическое руководство. Навигация по UML-модели и Справочник по API для расширения моделей UML.
Для использования шаблонов с командой Создать код необходимо включить директиву Modeling.Например:
<#@ Modeling ElementType="Microsoft.VisualStudio.Uml.Classes.IClass" Processor="ModelingProcessor" #>
Атрибут ElementType определяет тип UML-элемента, к которому применим данный шаблон.
В этом шаблоне this принадлежит временному классу со следующими свойствами:
Element = UML-элемент IElement, к которому применяется шаблон.
Errors: CompilerErrorCollection
ModelBus: ModelBus.Дополнительные сведения см. в разделе Практическое руководство. Интеграция моделей UML с другими моделями и средствами.
ProfileName = "C#Profile"
ServiceProvider: IServiceProvider
Session: TextTemplatingSession.
Store: Store.Это хранилище пакета Visualization and Modeling SDK, к которому применяется хранилище UML ModelStore.Для получения UML-хранилища IModelStore воспользуйтесь методом this.Element.GetModelStore().
Следующие советы могут оказаться полезными при создании текстового шаблона.Эти сведения подробно представлены в разделе Создание кода и текстовые шаблоны T4.
Задать расширение имени получаемого файла можно в директиве Output.Каждому текстовому шаблону требуется отдельная директива Output.
Шаблон автоматически ссылается на некоторые сборки.Эти сборки включают, к примеру, System.dll и Microsoft.VisualStudio.Uml.Interfaces.dll.
Для использования других сборок в создаваемом программном коде необходимо использовать директиву Assembly.Например:
<#@ Assembly Name="%ProgramFiles%\Microsoft Visual Studio 11.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.ArchitectureTools.Extensibility.dll" #>
Некоторые пространства имен, такие как System, автоматически импортируются в программный код.Для других пространств имен можно использовать директиву Import так же, как использовалась бы инструкция using.Например:
<#@ Import Namespace="Microsoft.VisualStudio.Uml.Classes" #>
<#@ Import Namespace="Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml" #>
Используйте директиву Include, чтобы создать ссылку на текст другого файла.
Части шаблона, заключенные в скобки <# ... #>, выполняются командой Создать код.Части шаблона за пределами этих скобок копируются в получаемый файл.Важно различать генерирующий код и генерируемый текст.Текст может генерироваться на любом языке.
Выражения <#= Expressions #> оцениваются и преобразуются в строки.
См. также
Основные понятия
UML-схемы классов: справочные материалы