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, работающего на нем, достаточно велики, однако, если вы сделаете это правильно, повышение производительности будет впечатляющим.
изменить - после нескольких лет опыта я делаю следующие наблюдения:
- VSL DSL имеют плохую визуальную производительность больших диаграмм, вам нужно сложить элементы модели (скрыть / показать)
- трудно ориентироваться на больших диаграммах с множеством соединительных линий (схемы сложны)
- Большие модели работают адекватно для генерации кода и т. Д., Причем время, затрачиваемое в основном на десериализацию (как и ожидалось)
- Сравнение моделей затруднено из-за большого количества GUID
- Хороший опыт разработчика требует большой разработки по сравнению со стандартными диалоговыми окнами свойств.
- Модели могут быть зашифрованы для защиты 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
)