Недавно я видел несколько статей, в которых показано, как сопоставить код Dart с UML и даже как преобразовать код Dart в UML (используя нотацию Plant UML), однако ни одна из найденных мной статей не показывает, как генерировать код Dart из UML. модель автоматически.

Я начал искать подходящие инструменты моделирования OS UML, которые можно было бы адаптировать для поддержки Dart, и наткнулся на этот инструмент NClass. Он поставил мне несколько галочек в том смысле, что он относительно небольшой, поддерживает только диаграммы классов и вариантов использования, имеет существующую возможность генерации кода для кода C # и Java и написан на C #, который является одним из моих основных языков разработки (нашел больше OS UML инструменты, реализованные на Java, как это бывает). Только винда, к сожалению.

NClass использует подход с использованием специализированных диаграмм классов для рассматриваемого языка, чтобы лучше поддерживать генерацию кода. Это, конечно, требует некоторых вольностей в том, что касается чистого UML, но я считаю, что оно того стоит из-за возможности генерации кода, которую он поддерживает.

Любой, кто хочет взглянуть на это сейчас, может найти мой разветвленный проект здесь, мои обновления находятся в ветке dart. Последний бинарный zip и файл проекта NClass (ncp), содержащий скриншоты из этой статьи, можно найти здесь. Я также поднял проблему в проекте NClass, чтобы отслеживать интеграцию Dart, пожалуйста, обращайтесь к ней для получения обновлений прогресса/статуса. В настоящее время диаграммы классов Dart теперь поддерживаются, чему посвящена эта статья, генерация кода будет добавлена ​​в ближайшее время и станет предметом будущей статьи.

В качестве примера уровня специализации я ссылаюсь на приведенную выше диаграмму, показывающую различные типы классов в UML:

Обратите внимание, что у нас есть класс с именем Mixin, он не просто называется Mixin, у него есть атрибуты, характерные для класса Dart Mixin (конечно, их нет в C# или Java). На следующей диаграмме показано, что класс Mixin может быть создан как класс:

Кроме того, поскольку это Mixin, у него не может быть конструктора, поэтому конструкторы классов Mixin не могут быть добавлены: -

Деструкторы в Dart, конечно, не могут, поэтому они были удалены и для диаграмм классов Dart.

На приведенной ниже диаграмме показаны дополнительные специализации поддержки Dart:

Обратите внимание на несколько моментов: диаграммы классов Dart можно добавлять вместе с диаграммами C# и Java, именованные конструкторы поддерживаются так же, как и в Dart. Также поддерживаются стандартные конструкции UML, такие как поля, свойства (получить, установить), методы и различные уровни видимости. Фабричные конструкторы создаются как специализированные конструкторы:

Обратите внимание на флажок Factory и слово «фабрика» в имени конструктора. Внимательный также заметит наличие флажка Override, предназначенного для сопоставления с аннотацией Dart @override. Другие флажки для Hider, Virtual и Sealed не применяются к Dart, поэтому они неактивны.

Итак, вы поняли, если вы просмотрите предоставленный файл проекта в NClass, вы увидите другие детали специализации для Dart. На данный момент не хватает нескольких вещей, в частности, поддержки полей «поздно» и «окончание» и аннотации «это» в параметрах конструктора. Их можно добавить позже, однако сейчас их достаточно, чтобы начать генерировать код Dart из наших диаграмм классов Dart.

На этом пока все на диаграммах классов, фактическая генерация кода Dart из этих диаграмм описана в следующей статье Генерация кода Dart из UML — Генерация кода.