Инструменты Microsoft Visual Studio SDK DSL — есть серьезные любители?
-
21-08-2019 - |
Вопрос
Мы рассматриваем набор инструментов Microsoft DSL для создания абстрактных дизайнеров.Я уже сделал несколько POC, но хотел бы узнать мнение по этому поводу.
Кто-нибудь здесь может поделиться своим опытом работы с Microsoft DSL Toolkit и T4?Кроме того, помогут любые указатели на проекты DSL с открытым исходным кодом - например.Версия для моделирования Microsoft Service Factory в значительной степени зависит от набора инструментов DSL.
Поскольку выпуск OSLO/Quadrant займет некоторое время, я думаю, что единственный вариант, который у нас есть, — это положиться на дизайнера Microsoft DSL.(См. блог Кита о том же.)
Кроме того, вот некоторая информация о DSL, которая у меня уже есть:
1 - Хорошая лаборатория в MSDN по инструментам DSL
2 - Список проектов в Codeplex с использованием инструментария DSL
Решение
Мы проделали значительную работу с DSL, и у нас есть несколько из них для использования внутренними и клиентскими консультантами, хотя большую часть работы с ними проделал не я.Как только вы наладите моделирование (немалый подвиг), я бы сказал, что это отличные инструменты.
К сожалению, я не могу указать вам на какие-либо проекты с открытым исходным кодом и добавлю, что инвестиции в запуск и работу нетривиального DSL довольно велики, однако, если вы сделаете их правильно, то прирост производительности будет впечатляющим.
изменить - после нескольких лет опыта я делаю следующие наблюдения:
- У VS DSL плохая визуальная производительность, большие диаграммы, нужно свернуть элементы модели (скрыть/показать).
- на больших диаграммах со множеством соединяющихся линий сложно ориентироваться (сложны макеты)
- Большие модели работают адекватно для генерации кода и т. д., при этом время в основном уходит на десериализацию (как и ожидалось).
- Сравнение моделей затруднено из-за большого количества GUID.
- Хороший опыт разработчика требует тщательной разработки стандартных диалоговых окон свойств.
- Модели могут быть зашифрованы для защиты IP, это чрезвычайно затрудняет последующее сравнение (но это справедливо для всех зашифрованных файлов).
Другие советы
Я рассмотрел использование инструментария Visual Studio DSL.В конечном итоге я обнаружил, что эти инструменты слишком сужают ситуацию.Требовать графический интерфейс без какой-либо возможности легко описать лежащую в его основе текстовую грамматику кажется мне неадекватным.Мне нужна возможность легко использовать DSL без графического интерфейса.
Осло, похоже, идет в очень странном направлении, сохраняя все метаданные для DSL в базе данных SQL.Мне это кажется чуждым и, безусловно, может замедлить процесс, особенно если вам нужна быстрая интеграция с IDE.Признаюсь, я не вникал в это глубоко, так что это может быть лучше, чем мое впечатление о нем.
Кстати, недавно я реализовал DSL, используя Антлр.Вы можете найти мой пост как ответ на вопрос на SO об этом. здесь
Помимо вышесказанного, НОРМА Инструмент объектно-ролевого моделирования построен на основе DSL Tools.Это очень сложный пример того, что можно с их помощью сделать, и он демонстрирует использование XML-преобразований для преобразования модели и генерации кода.
Я определенно серьезный любитель.Недавно Иве создал DSL для моделирования процессов обработки заказов в системе заказов.Мы используем службу Windows, которая подключается к различным веб-службам в зависимости от статуса процесса, который имеет конкретная строка, а затем меняет статус в зависимости от результата (Далее, Ошибка, Отказ).Редактирование этой db-таблицы вручную занимало очень много времени, поэтому я сделал язык и генераторы для sql-кода.
Я должен проверить, разрешено ли мне публиковать какой-либо код из проекта, но я публикую структуру БД, чтобы вы могли понять, почему сложно редактировать ее вручную.Мне нужно ввести данные примерно за10 процессов заказа по 5-20 шагов каждый с действиями и всем остальным (ProcessActionId — это ссылка на веб-сервис).
CREATE TABLE [dbo].[OrderProcessStep](
[OrderProcessCode] [int] NOT NULL,
[PreviousProcessStatusCode] [int] NOT NULL,
[NextProcessStatusCode] [int] NULL,
[DenialProcessStatusCode] [int] NULL,
[ErrorProcessStatusCode] [int] NULL,
[ProcessActionId] [int] NULL,
[StepComment] [varchar](500) NOT NULL,
[SecondsToNext] [int] NULL,
[SecondsToError] [int] NULL,
[SecondsToDenial] [int] NULL,
CONSTRAINT [PK_OrderProcess] PRIMARY KEY CLUSTERED
(
[OrderProcessCode] ASC,
[PreviousProcessStatusCode] ASC
)