T4 против CodeDom против Осло

В проекте создания приложения, над которым я работаю, я пытаюсь решить, использовать ли Oslo, T4 или CodeDom для генерации кода. Наши цели - свести к минимуму зависимости и стимулировать генерацию кода для доменного дизайна из пользовательских историй. Первым шагом будет создание тестов из пользовательских историй, но мы хотим, чтобы эксперты домена могли писать свои истории на различных носителях (например, в пользовательских приложениях, Word и т. Д.) И по-прежнему генерировать тесты из рассказы.

Что я знаю до сих пор:

  1. CodeDom требует.NET, но может выводить только файлы классов.NET (например, .cs, .vb). Уровень сложности довольно высокий.
  2. Т4 требует CodeDom и VS Standard+. Уровень сложности довольно разумный, особенно с T4 Toolbox.
  3. Осло очень новый. Я понятия не имею о зависимостях, но я полагаю, что вы должны быть по крайней мере на.NET 3.5. Я также не уверен насчет возможностей генерации кода или сложности добавления новых грамматик. Тем не менее, эксперты по предметной области, вероятно, могли бы написать пользовательские истории в Intellipad довольно легко. Также не уверен в легкости преобразования историй в Word в MGrammar.

Каковы ваши мысли, опыт и т. Д. С любым из вышеперечисленных инструментов. Мы хотим придерживаться Microsoft или инструментов с открытым исходным кодом.

5 ответов

Решение

Перейти с Т4 - простое решение.

  • Осло слишком новый, а инструменты слишком сырые, чтобы быть чем-то большим, чем технология только для оценки
  • CodeDOM является мощным средством, если вам нужно генерировать классы CLR во время выполнения, и вы готовы пожертвовать легкой модификацией вашего сгенерированного вывода.
  • T4 (с инструментарием T4) - это простой в использовании инструмент генерации кода общего назначения. Единственная сложность, с которой я столкнулся, связана с интеграцией во время сборки.

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

Вам нужно будет определить некоторый формализованный язык для пользовательских историй, будь то XML или язык домена Осло. Осло потребовал бы, чтобы ваши эксперты в области изучили инструментарий Осло. Вы можете использовать Word + XML. Затем вы определяете красивый шаблон в Word со встроенной схемой XML, и после написания истории вы можете получить его из Word в формализованном синтаксисе XML. Этот XML, конечно, можно использовать для управления генераторами через XSLT или Linq.

CodeDOM мощный, но довольно громоздкий. Это ИМХО не простое в использовании решение, и оно не имеет реальной поддержки шаблонов.

У меня нет опыта работы с T4, но его шаблонные функции предварительно.

Продукт Oslo действительно довольно новый, требует.Net 4.0, среды выполнения. Это все еще только ОСАГО. Это очень мощная среда, хотя у меня есть некоторые сомнения по поводу истории создания базы данных.

Надеюсь это поможет.

Ну, Осло не вписывается в список. У него пока нет истории создания кода. Так что придерживайтесь T4.

Есть несколько интересных приложений Осло

  • "новый LDAP" System.Identity, больше в видео сеанса PDC http://microsoftpdc.com/Sessions/SVC28
  • System.Modelling (я думаю) Microsoft.UML2, где вы можете помещать информацию о методах, классах, модулях и т. Д. В репозиторий, анализировать его и создавать отчеты. Например, создать отчет с методами, добавленными / удаленными между двумя сборками http://microsoftpdc.com/Sessions/SVR19
  • и конечно же моделирование

Осло не собирается создавать код для вас. Вам придется создать среду выполнения (например, программу на C#), которая изменяет свое поведение в зависимости от данных. Вы можете видеть это как интернет-браузер.

Я не верю, что Осло требует.Net 4.0, как упоминает Райн. Для моей стажировки в Avanade Netherland я создаю Oslo MSchema и MGrammars и среду выполнения C#3.5. В зависимости от заданных данных он будет создавать (не генерировать) сервисы WCF и запускать их.

Другие вопросы по тегам