2009-09-16 2 views
2

Для проекта маленькой ночи я хотел бы написать компонент проверки, который можно использовать в приложении .NET, чтобы выполнить обычную и утомительную проверку объекта, входных параметров и условий сообщения.Как определить DSL над C#

Моя первая идея заключалась в том, чтобы сбросить всю эту логику настройки проверки в файл конфигурации XML и предоставить жидкостный интерфейс для людей, которые хотели бы иметь его в коде.

Поскольку я хотел был бы предоставить что-то, что на самом деле можно использовать, я подумал о предоставлении специализированного DSL (специфического для домена языка). Вопрос в том, какие инструменты я должен использовать для этого?

Я думал о разборе его вручную с помощью регулярного выражения. Но лично я хотел бы иметь что-то более ... полезное.

Итак, что бы вы предложили?

ответ

1

Если вы ищете специально на DSL, взглянуть на проект ANTLR. Мы использовали его в своей компании довольно успешно в прошлом.

+0

Выглядит симпатично. Но я бы потребовал что-то, что может быть частью библиотеки классов.И из того, что я видел, это требует java. Но хорошо, тем не менее, – Dejan

+2

А, извините. Здесь: http://www.antlr2.org/doc/csharp-runtime.html –

+0

К сожалению, у меня есть неразрешенная ошибка с библиотекой ANTLR C#, она не смогла использовать сгенерированный парсер :( –

0

Вещь с DSl заключается в том, что они редко эффективны изолированно. Чтобы быть полезными для написания реального программного обеспечения, вам действительно нужно иметь возможность встроить DSL внутри основного языка. Сравните, например, то, как Linq работает против простого SQL. Другим хорошим примером является XML-литерал в VB. Оба позволяют писать реальный код, в PL общего назначения и взаимно сплетать его с более простым декларативным кодом DSL.

Результат - нечто более мощное, чем автономный SQL или простой XML-редактор.

Недостатком этого, к сожалению, является то, что ни C#, ни VB не предлагают никаких функций метапрограммирования, поэтому единственный способ сделать это для основных разработчиков .net - это создать собственный язык. Если это то, что вы делаете только ради удовольствия, вы можете модифицировать компилятор mono C#, чтобы добавить интересующие вас функции на язык. Другой альтернативой может быть попытка рубина. У этого есть гибкий синтаксис, который позволит Вам уйти с большим количеством сумасшествия. Персоналий, однако, я бы предпочел взломанный подход C#.

+0

«ни C#, ни VB не предлагает никакой мета программные функции ".hh, но это не единственные языки clr. Проверьте boo или nemerle. – anthony

+0

Итак, люди, которые используют SQL или XSLT, не пишут« реальное программное обеспечение », а их код« редко эффективен »? –

+0

То, что вам не хватает, «изолировано». В большинстве случаев эти языки встроены в другой язык (Java, C#, VB, Ruby и т. д.). Обычно они встроены в строки, обрабатываемые API-интерфейсами. Это очень далеко от идеала , однако Linq предлагает гораздо более эффективный опыт разработки, чем «чистый ADO.NET». Следует предпочитать глубокую интеграцию DSL с хостом, а не изоляцию. Проблема заключается не в DSL, а в изолированных DSL. = хорошо, изолировано = плохо –

0

Обратите внимание на Oslo от Microsoft, не уверен, что он делает то, что вы хотите, но я знаю, что вы можете создавать парсеры DSL и указывать грамматики и генерировать библиотеки классов, которые могут анализировать данные на основе грамматики.

Более подробная информация о языке «М» и как использовать его в here

0

Почему так далеко? Начните с использования дженериков и свободного интерфейса. Начните простую и проделайте это через какое-то производство. Если трение слишком велико, имея дело с плавным интерфейсом, посмотрите на использование DSL.

0

Вы можете попробовать DSL Tools для Visual Studio.

Смежные вопросы