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

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

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

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

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

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

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

4 ответа

Решение

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

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

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

  1. VSL DSL имеют плохую визуальную производительность больших диаграмм, вам нужно сложить элементы модели (скрыть / показать)
  2. трудно ориентироваться на больших диаграммах с множеством соединительных линий (схемы сложны)
  3. Большие модели работают адекватно для генерации кода и т. Д., Причем время, затрачиваемое в основном на десериализацию (как и ожидалось)
  4. Сравнение моделей затруднено из-за большого количества GUID
  5. Хороший опыт разработчика требует большой разработки по сравнению со стандартными диалоговыми окнами свойств.
  6. Модели могут быть зашифрованы для защиты IP, что делает последующее сравнение чрезвычайно трудным (но это верно для всех зашифрованных файлов).

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

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

Кроме того, я недавно внедрил DSL с использованием Antlr. Вы можете найти мой пост в ответ на вопрос о SO здесь

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

Я определенно серьезный игрок. Ivé недавно сделал DSL для моделирования процессов заказов для системы заказов. Мы используем windowsservice, который подключается к различным веб-сервисам в зависимости от того, какой процесс имеет конкретная строка, а затем изменяет статус в зависимости от результата (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
)
Другие вопросы по тегам