Я использовал MyGeneration, и мне нравится его создание кода, который использует блоки приложения доступа к данным от Microsoft для моего уровня доступа к данным, а также синхронизацию концепций базы данных с доменом, который я моделирую. Хотя для того, чтобы сделать это продуктивным, потребовалось более крутое, чем ожидалось, время обучения за один уик-энд.
Мне интересно, что делают другие, связанные с генерацией кода.
http://www.mygenerationsoftware.com
http://www.codesmithtools.com/
Другие?
Примерно в 2000 году компания, в которой я работал, использовала продукт Veritas Software (я полагаю, что так оно и было) для моделирования компонентов и генерации кода, объединяющего компоненты (dll). У меня не было большого опыта с этим, но кажется, что генерация кода долгое время была «святым Граалем». Это практично? Как его используют другие?
Спасибо!




Я использовал CodeSmith. Было очень полезно.
Я работал с CSLA и использовал codemith для генерации моего кода с использованием шаблонов CSLA.
codemithtools.com
Я успешно использовал LLBLGen и nHibernate для создания слоев Entity и DAL.
Если ваша база данных является вашей моделью, SubSonic имеет отличный генератор кода, который, начиная с версии 2.1, больше не требует ActiveRecord (вместо этого вы можете использовать шаблон репозитория). Он менее гибкий, чем другие, но есть настройки, которые можно сделать в стандартных шаблонах.
Я люблю использовать SubSonic. Открытый исходный код - это способ генерации кода, я думаю, потому что очень легко изменить шаблоны и ядро, поскольку они всегда имеют тенденцию иметь ошибки или одну или две вещи, которые вы хотите сделать, но которые не встроены.
Я использовал генерацию кода для функций swizzle в векторной математической библиотеке. Я использовал для этого собственный скрипт PERL. Ни один из рассмотренных мною генераторов FLOSS не подходил для создания функций swizzle.
Я обычно использую шаблоны C++, а не генерацию кода.
Я использовал CodeSmith и MyGeneration, тоже не слишком увлекался этим, чувствовал себя несколько кратко в использовании, изучал языки шаблонов и т.
SubSonic - это то, что мы иногда используем здесь для создания уровня доступа к данным. При использовании в проектах нужного размера это фантастический инструмент для экономии времени. щелкающий
В основном я использовал LLBLGen Pro для генерации кода. Он предлагает множество шаблонов для генерации, и вы можете предоставить свои собственные шаблоны, как и CodeSmith. Служба поддержки была отличной.
По сути, я создаю свои бизнес-объекты и DAL с помощью LLBLGen и поддерживаю их в актуальном состоянии. В шаблонах кода есть разделы, в которых вы можете добавить свою собственную логику, которая не будет уничтожена во время регенерации. На это обязательно стоит взглянуть.
Мы настраиваем генерацию кода, используя литералы linq и XML (VB). Мы еще не нашли способ разбить решения на шаблоны; однако эти две технологии делают эту задачу настолько тривиальной, что я не думаю, что мы это сделаем.
T4 - убийца CodeSmith для Microsoft !!!!
Пойдите, проверьте это. Microsoft не хочет уничтожать своих партнеров, чтобы они не рекламировали это, но это вещь, с которой нужно считаться, и ЕГО БЕСПЛАТНО, и она устанавливается в Visual Studio 2008.
Я бы счел генерацию кода вредной, поскольку она раздувает кодовую базу без добавления новой логики или понимания. В идеале следует повысить уровень абстракции, использовать файлы данных, шаблоны или макросы и т. д., Чтобы избежать генерации большого количества стандартного кода. Это помогает выполнять работу быстро, но в долгосрочной перспективе может ухудшить ремонтопригодность.
Если выбранный вами язык программирования становится менее болезненным из-за его генерации на каком-то языке шаблонов, это, кажется, указывает на то, что вы сэкономите еще больше времени, выполняя работу более высокого уровня на другом, возможно, более динамичном языке. YMMV.
Я считаю, что это спорный вопрос, если вы можете сами создавать шаблоны, используемые для генерации кода. Уровень абстракции действительно зависит от вас.
Мы используем Codesmith и добились больших успехов в этом. Сейчас я постоянно пытаюсь найти, где можно реализовать шаблоны для ускорения рутинных процессов.
LLBLGen Pro - отличный инструмент, который позволяет вам написать независимое от базы данных решение. Очень быстро освоить основные функции. Расширенные функции не намного сложнее. Я очень рекомендую вам это проверить.
Я проработал четыре года главным разработчиком в веб-агентстве, когда я с нуля написал свои первые два или три сайта, я вскоре понял, что делать это постоянно будет очень скучной задачей. Итак, я начал писать свой собственный движок-генератор веб-сайтов.
Моей отправной точкой был этот сайт http://www.codegeneration.net/. Я взял один из их примеров для простой генерации грубого кода и расширил его до уровня, на котором я генерировал с его помощью целые сайты.
Я использовал xml для определения различных частей веб-сайта (страниц, списков данных, объединений, таблиц, управления формами). Созданные веб-сайты были полностью отделены от генератора, поэтому созданный веб-сайт также можно было изменить вручную.
Вот их статья http://www.codegeneration.net/tiki-read_article.php?articleId=19.
Я также вижу вредную генерацию кода, но только если вы используете сторонние инструменты, такие как codemith и mygeneration. У меня есть 2 хранимые процедуры, которые генерируют объекты моего домена и интерфейсы домена
Пример
GenerateDomainInterface 'TableName'
Затем я просто копирую и вставляю его в визуальную студию. Отлично работает для тех задач, которые я ненавижу выполнять.
Один комментарий, то, что вы описали, - это именно то, как работает MyGeneration (а MyGeneration является бесплатным и с открытым исходным кодом). Это шаблонная среда, которая генерирует код, который только что добавляется в ваш проект. Интересно, что вы генерируете код из SPROC. Спасибо за ответ.
Я часто использую две рамы.
Стоит обратить внимание на Рагель. Он используется для генерации кода для конечных автоматов.
Вы просто добавляете простую разметку в исходный код, а затем запускаете генератор на Ragel генерирует код для C, C++, Objective-C, D, Java и Ruby, и его легко смешать с вашим обычным исходным кодом.
Ragel даже позволяет выполнять код при переходах между состояниями и т. д. Это упрощает создание парсеров форматов файлов и протоколов.
Некоторые известные проекты пользователя Ragel: Дворняга, отличный веб-сервер на Ruby. И Hpricot, html-парсер на основе Ruby, в некотором роде вдохновленный jQuery.
Еще одна замечательная особенность Ragel - то, как он может создавать диаграммы на основе графвиз, которые визуализируют ваши конечные автоматы. Ниже приведен пример, взятый из Зед Шоустатья на диаграммах состояний ragel.

(source: zedshaw.com)
XMLBeans - это привязка к XML на основе Java. У него отличный рабочий процесс, и я часто им пользуюсь.
XMLBeans обрабатывает xml-схему, описывающую вашу модель, в набор java-классов, представляющих эту модель. Вы можете программно создавать модели, а затем сериализовать их в xml и обратно.
Я сделал несколько разовых работ по генерации кода с помощью Castor для создания исходного кода Java на основе XSD. Последним применением было создание классов Java для реализации Open Travel Association. Схема OTA довольно сложна, и ее было бы сложно сделать вручную. Castor проделал довольно хорошую работу, учитывая сложность схемы.
Я использовал MyGeneration, который использует C# для написания ваших шаблонов кода. Однако я начал использовать Python и обнаружил, что могу писать код, который генерирует другой код Быстрее на этом языке, чем если бы он был написан на C#. Впоследствии я использовал Python для написания кода на C#, TSQL и VB.
Как правило, код, генерирующий другой код, труднее отслеживать по самой его природе. Более чистый синтаксис Python очень помогает, делая его более читабельным и более удобным в обслуживании, чем аналог в C#.
Удалось ли вам использовать SQLAlchemy + Python для создания, скажем, сопоставлений NHibernate? (или другой типичный кодогенератор)
Codemith для .net
Я написал утилиту, в которой вы указываете таблицу, и она генерирует триггер Oracle, который записывает все изменения в этой таблице. Делает регистрацию действительно простой.
Есть еще один, который я написал, который генерирует класс Delphi, который моделирует любую таблицу базы данных, которую вы ему даете, но я считаю, что это запах кода, поэтому я редко использую его.
В компании мы написали собственный для генерации большинства наших классов entity / dalc / business и связанных хранимых процедур, так как это заняло совсем немного времени, и у нас были некоторые особые требования. Хотя я уверен, что мы могли бы добиться того же, используя существующий генератор, работать над этим маленьким проектом было забавно.
Codesmith был рекомендован многими людьми, и он действительно кажется хорошим. Лично все, что мне нужно от генератора кода, - это упростить изменение шаблонов.
Мое поколение полностью!
MyGeneration is an extremely flexible template based code generator written in Microsoft.NET. MyGeneration is great at generating code for ORM architectures. The meta-data from your database is made available to the templates through the MyMeta API.
Я использую инструменты гибернации в myEclipse для создания моделей предметной области и кода DAO из моей модели данных. Кажется, он работает довольно хорошо (есть некоторые проблемы, если вы пишете собственные методы в своих DAO, они, кажется, теряются при перезаписи), но в целом, похоже, он работает довольно хорошо, особенно в сочетании со Spring.
SubSonic великолепен !! Возможности запросов просты для понимания, а реализация хранимых процедур действительно потрясающая. Я мог бы продолжать и продолжать. Это мгновенно делает вас продуктивным.
Я в основном кодирую на C#, а когда мне нужно генерировать код, я делаю это в XLST, когда исходный код можно просто преобразовать в XML или в ruby-скрипт, когда он более сложный.
Если часть генерации кода требует частых модификаций несколькими разработчиками, CodeSmith работает очень хорошо (и новичкам легче изучить, чем XSLT или ruby).
Гибкая платформа Outsystems можно использовать для создания хорошо документированных приложений C# и Java с открытым исходным кодом. Поскольку он также имеет несколько функций, связанных с развертыванием, управлением и изменением, большинство людей в конечном итоге используют его не только для генерации кода, но и для управления полным жизненным циклом веб-приложений.
Некоторое время я использовал самодельный язык сценариев / шаблонов для генерации кода. (Я использовал этот язык в основном только для того, чтобы найти применение в моем маленьком домашнем проекте)
Недавно я создал несколько сценариев SQL * PLUS для создания кода доступа к базе данных (для нас нет Hibernate ...)
Добавлены LLBGen и Subsonic. Спасибо! К вопросу о практичности и способах использования? Вы используете генерацию кода исключительно для доступа к данным? Насколько близко это представление моделируемой / реализуемой области (бизнес-объекты)? Размер проекта (размер команды, продолжительность и т. д.) Тоже будет отличным показателем?