Практическое руководство. Создание кода из UML-схем классов
Данный пакет Visual Studio 2010 позволяет создавать в Visual Studio 2010 Ultimate код из UML-элементов с помощью команды Создать код. По умолчанию команда создает тип C# для каждого типа, выбираемого на UML-схеме классов. Это поведение можно изменить и расширить, изменив или скопировав текстовые шаблоны для создания кода. Можно задать другое поведение для типов, которые содержатся в разных пакетах модели. Дополнительные сведения см. в разделе Пакеты функций Visual Studio.
Важно!
Для использования этой функции необходимо установить пакет дополнительных компонентов для Visual Studio 2010.
Если пакет дополнительных компонентов визуализации и моделирования Visual Studio 2010 заменяется пакетом дополнительных компонентов Feature Pack 2 Visual Studio 2010, необходимо пересопоставить пользовательские шаблоны для проектов создания кода следующему местоположению:
…\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\<имя_пакета_дополнительных_компонентов_Visual_Studio>\<номер_версии_пакета_дополнительных_компонентов_Visual_Studio>
Дополнительные сведения см. в разделе Настройка команды создания кода.
Команда Создать код хорошо подходит для создания кода из выбранных пользователем элементов и создания отдельных файлов для каждого 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%.
Важно
{Структура_пакета} может использоваться только в свойстве Целевой каталог.Имя файла шаблона
Шаблон, который будет выполнять преобразование.
Можно использовать предоставленные шаблоны или создать свой собственный. Предоставленные шаблоны можно найти в следующих местоположениях:
Пакет дополнительных компонентов визуализации и моделирования Visual Studio 2010: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<имя_пакета_дополнительных_компонентов_Visual_Studio>\1.0\Templates\Text\
Совет
Обычно параметру %LocalAppData% соответствует путь имя_диска:\Users\имя_пользователя\AppData\Local.В Windows XP и Windows 2003 вместо %LocalAppData% следует использовать переменную %AppData%.Пакет дополнительных компонентов Feature Pack 2 Visual Studio 2010: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<имя_пакета_дополнительных_компонентов_Visual_Studio>\<номер_версии_пакета_дополнительных_компонентов_Visual_Studio>
К элементу можно прикрепить любое количество привязок.
Написание текстового шаблона
Можно создать собственные текстовые шаблоны. Текстовые шаблоны позволяют создавать программный код или текстовые файлы любого другого вида.
Рекомендуется начать с изменения копий стандартных шаблонов. Можно копировать шаблоны из следующих местоположений:
Пакет дополнительных компонентов визуализации и моделирования Visual Studio 2010: %LocalAppData%\Microsoft\VisualStudio\10.0\Extensions\Microsoft\<имя_пакета_дополнительных_компонентов_Visual_Studio>\1.0\Templates\Text\
Совет
Обычно параметру %LocalAppData% соответствует путь имя_диска:\Users\имя_пользователя\AppData\Local.В Windows XP и Windows 2003 вместо %LocalAppData% следует использовать переменную %AppData%.
Пакет дополнительных компонентов Feature Pack 2 Visual Studio 2010: …\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Modeling\<имя_пакета_дополнительных_компонентов_Visual_Studio>\<номер_версии_пакета_дополнительных_компонентов_Visual_Studio>
Сведения о текстовых шаблонах см. в следующих разделах.
Текстовый шаблон — это прототип получаемого файла, который содержит текст и программный код, выполняющий считывание модели. Дополнительные сведения см. в разделе Создание кода и текстовые шаблоны 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
Host: ITextTemplatingEngineHost
ModelBus: ModelBus. Дополнительные сведения см. в разделе Практическое руководство. Интеграция моделей UML с другими моделями и средствами.
ProfileName = "C#Profile"
ServiceProvider: IServiceProvider
Session: TextTemplatingSession.
Store: Store. Это хранилище пакета Visualization and Modeling SDK, к которому применяется хранилище UML ModelStore. Для получения UML-хранилища IModelStore воспользуйтесь методом this.Element.GetModelStore().
Следующие советы могут оказаться полезными при создании текстового шаблона. Эти сведения подробно представлены в разделе Создание кода и текстовые шаблоны T4.
Для отладки текстового шаблона вставьте в сегмент инструкции следующее: System.Diagnostics.Debugger.Launch();
Задать расширение имени получаемого файла можно в директиве Output. Каждому текстовому шаблону требуется отдельная директива Output.
Шаблон автоматически ссылается на некоторые сборки. Эти сборки включают, к примеру, System.dll и Microsoft.VisualStudio.Uml.Interfaces.dll.
Для использования других сборок в создаваемом программном коде необходимо использовать директиву Assembly. Примеры.
<#@ Assembly Name="%ProgramFiles%\Microsoft Visual Studio 10.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-схемы классов: справочные материалы
UML-схемы классов: правила работы
Практическое руководство. Создание файлов из модели UML
Журнал изменений
Дата |
Журнал |
Причина |
---|---|---|
Декабрь 2010 |
Материал обновлен с учетом пакета дополнительных компонентов Visual Studio 2010 Feature Pack 2. |
Улучшение информации. |