Visual Studio UML 2010 генерация кода для методов или свойств - PullRequest
2 голосов
/ 27 декабря 2011

Я создал проект моделирования UML для Visual Studio 2010 и создал диаграмму классов с несколькими классами. Генерация кода работает нормально (я использую шаблон генерации кода, поставляемый в пакете визуализации и моделирования для Visual Studio). Всякий раз, когда я нажимаю «Создать код» в классе, я получаю хорошую заглушку класса, включая свойства и заглушки методов для этого класса.

Теперь я пытаюсь добавить собственный код в метод класса. Идея состоит в том, чтобы каждый раз, когда я генерировал код для класса, метод уже имел некоторый код, написанный в нем (по умолчанию содержимое каждого метода - «throw new Sytem.NotImplementedException ()»). Насколько я понимаю, сначала нужно создать шаблон tt / t4. Затем мне нужно настроить в конструкторе классов в свойствах метода привязки текстового шаблона - они должны указывать на вновь созданный шаблон. Я попробовал это, но я не могу понять, как заставить это работать. Или я неправильно понимаю концепцию здесь? Есть идеи?

И да, я прочитал документацию msdn о генерации кода и текстовых шаблонах, а также блог Олега Сыча. Но ни один из них не показал мне способ решить эту проблему.

1 Ответ

1 голос
/ 02 января 2012

Ознакомьтесь с этой статьей Как: генерировать код из диаграмм классов UML : в нем говорится, что вам нужно установить пакет Visual Studio Feature Pack, чтобы получить команду "Генерировать код" в элементах UML. Насколько я могу судить, вам нужна подписка MSDN, чтобы получить этот Feature Pack. Так что я не смог попробовать.

Существует раздел, озаглавленный Настройка команды сгенерированного кода, и он действительно предлагает изменить шаблоны T4 по умолчанию, используя в сочетании с UML. Если бы я был вами, у меня не было возможности получить подписку MSDN, я бы написал надстройку (или расширение VS) и обработал файл UML. Это потребует от вас понимания внутренней работы UML-файла для генерации C # из UML.

Вот UML некоторого * .classdiagram файла. Это для класса, который содержит атрибут (поле) и операцию. Здесь можно запустить вручную?

<?xml version="1.0" encoding="utf-8"?>
<logicalClassDesignerModel xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" xmlns:dm1="http://schemas.microsoft.com/dsltools/Kernel" xmlns:dm2="http://schemas.microsoft.com/dsltools/Component" xmlns:dm3="http://schemas.microsoft.com/dsltools/Activity" xmlns:dm4="http://schemas.microsoft.com/dsltools/Interaction" xmlns:dm5="http://schemas.microsoft.com/dsltools/UseCase" xmlns:dm6="http://schemas.microsoft.com/dsltools/UmlModelLibrary" xmlns:dm7="http://schemas.microsoft.com/dsltools/UmlDiagrams" xmlns:dm8="http://schemas.microsoft.com/dsltools/ModelStore" dslVersion="1.0.0.0" Id="0b035e1e-cf78-4d7b-a9c5-7ae15e246642" name="UMLClassDiagram1" linkedPackageId="30fb2a44-daa7-48cf-a306-c91b92f1dd7b" xmlns="http://schemas.microsoft.com/dsltools/LogicalClassDesigner">
  <packagedElements>
    <logicalClassDesignerModelHasTypes>
      <class Id="5d701b74-ed36-4baa-8318-0406964414ce" name="Class1" isAbstract="false" isLeaf="false" isActiveClass="false">
        <elementDefinition Id="82f92ae7-5d9b-4e64-8497-39c686ce2e5d" />
        <ownedAttributesInternal>
          <property Id="06827ace-592e-4cf7-bc13-946f073f2b73" name="Attribute2" isLeaf="false" isStatic="false" isReadOnly="false" isDerived="false" isDerivedUnion="false" aggregation="None" isComposite="false">
            <elementDefinition Id="3ebbef23-6573-42bf-8542-a3504f1ef28a" />
          </property>
        </ownedAttributesInternal>
        <ownedOperationsInternal>
          <operation Id="c061b4ea-9880-4674-8775-a7b360a2791d" name="Operation1" isLeaf="false" isStatic="false" isAbstract="false" concurrency="Sequential" isQuery="false">
            <elementDefinition Id="fe154244-f792-415d-8ebc-50d5e3a13362" />
            <ownedParameters>
              <operationHasOwnedParameters>
                <parameter Id="6cbf9775-608c-4a1c-bd17-14397c5ce0f3" direction="Return">
                  <elementDefinition Id="f9eabe6e-f42c-4ece-a0fc-6da2a5da11f0" />
                  <type_NamedElement>
                    <referencedTypeMoniker Id="7acb8bf9-6778-42b4-949c-5fbb1ed0a9bc" LastKnownName="String" />
                  </type_NamedElement>
                </parameter>
              </operationHasOwnedParameters>
            </ownedParameters>
          </operation>
        </ownedOperationsInternal>
      </class>
    </logicalClassDesignerModelHasTypes>
    <packageHasNamedElement>
      <referencedType Id="7acb8bf9-6778-42b4-949c-5fbb1ed0a9bc" name="String" isAbstract="false" isLeaf="false" cachedFullName="String">
        <elementDefinition Id="59259974-6d55-42c6-b7bd-763d77ac8ef9" />
      </referencedType>
    </packageHasNamedElement>
  </packagedElements>
  <package Id="30fb2a44-daa7-48cf-a306-c91b92f1dd7b" name="ModelingProject1">
    <elementDefinition Id="7c93d198-9011-4ef0-b6ba-9bd438a05ad5" />
    <profileInstances>
      <packageHasProfileInstances Id="d0a13992-851d-423d-916d-e1976a34f3f6">
        <profileInstance Id="c7f4eecf-37de-4fb2-b7fa-14747958e8cd" name="StandardProfileL2">
          <elementDefinition Id="e34d544e-0fea-4ed6-ac5e-1b74119ac791" />
        </profileInstance>
        <elementDefinition Id="0caec977-1f8c-4ba3-a7db-8cc9ad9cc73b" />
      </packageHasProfileInstances>
      <packageHasProfileInstances Id="3b4e12c7-adee-45b2-a675-bca964c11f99">
        <profileInstance Id="c9e7d01a-6aa0-4697-8877-cdafc408d6ca" name="StandardProfileL3">
          <elementDefinition Id="532ea607-fb19-44b8-8502-3351b05452be" />
        </profileInstance>
        <elementDefinition Id="29349502-908c-4fda-9054-c48619c59ed0" />
      </packageHasProfileInstances>
    </profileInstances>
  </package>
</logicalClassDesignerModel>
...