Microsoft Visual Studio SDK DSL Tools - Какие-нибудь серьезные участники?

Мы рассматриваем инструментарий Microsoft DSL для создания абстрактных дизайнеров. Я уже сделал несколько POC, но хотел бы получить некоторые мнения по этому поводу.

Кто-нибудь может поделиться своим опытом работы с Microsoft DSL Toolkit и T4? Кроме того, любые указатели на проекты с открытым исходным кодом DSL помогут - например. Версия моделирования Microsoft Service Factory в значительной степени зависит от инструментария DSL.

Поскольку OSLO/Quadrant займет некоторое время, чтобы освободиться, я думаю, что единственный вариант, который у нас есть, - это опираться на дизайнер Microsoft DSL. (См. блог Kieth на том же)

Кроме того, вот некоторая информация, которую я уже имею в DSL:

1 - Хорошая лаборатория в MSDN по инструментам DSL

2 - Список проектов в Codeplex с использованием набора DSL

Ответ 1

Мы проделали значительную работу с DSL, и у них есть несколько из них для использования в качестве консультантов на дому и на клиенте, хотя мне не удалось сделать с ними большую работу. Как только вы убрали моделирование (не малый подвиг), я бы сказал, что это отличные инструменты.

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

edit - после нескольких лет опыта я делаю следующие наблюдения:

  • VS DSL имеют плохие визуальные характеристики больших диаграмм, вам нужно сложить элементы модели (скрыть/показать)
  • большие диаграммы со многими взаимосвязанными строками трудно ориентироваться (макеты жесткие)
  • Большие модели выполняют адекватно для кода gen и т.д., причем время, затрачиваемое в основном на десерилизацию (как и ожидалось)
  • Сравнение моделей затруднено из-за большого количества GUID.
  • Хороший опыт разработчика требует много разработки из диалоговых окон свойств.
  • Модели могут быть зашифрованы для защиты IP, что делает сравнение более сложным (но это верно для всех зашифрованных файлов.)

Ответ 2

Я рассмотрел использование инструментария DSL для визуальной студии. В конечном счете, я нашел, что эти инструменты далеки от сжатия. Чтобы требовать GUI, без какой-либо способности легко описать лежащую в основе текстовую грамматику, мне кажется неадекватным. Мне нужна возможность легко использовать DSL без GUI.

Осло, похоже, идет в очень странном направлении, сохраняя все метаданные для DSL в SQL DB. Это просто кажется мне посторонним и, конечно, может замедлить работу, особенно если вам нужна быстрая интеграция с IDE. По общему признанию, я не заглядывал глубоко в это, поэтому это может быть лучше, чем мое впечатление от него.

В стороне, я недавно реализовал DSL, используя Antlr. Вы можете найти мое сообщение как ответ на вопрос о SO об этом здесь

Ответ 3

В дополнение к вышесказанному, инструмент NORMA для моделирования объектных ролей построен на инструментах DSL. Это очень сложный пример того, что можно сделать с ними, и демонстрирует использование XML Transforms для преобразования модели и генерации кода.

Ответ 4

Я определенно серьезный человек. Недавно Ivé создал dsl для моделирования порядка заказов для системы заказов. Мы используем службу windowsservice, которая соединяется с различными веб-службами, на основе которых processtatus имеет определенную строку, а затем изменяет статус на основе результата (Next, Error, Denial). Было очень требовательным редактировать эту таблицу db вручную, поэтому я создал язык и генераторы для кода sql.

Я должен проверить, разрешено ли мне отправлять какой-либо код из проекта, но я размещаю структуру базы данных, чтобы вы могли понять, почему это трудно сделать вручную. Я должен ввести данные для aprox. 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
)