Ответ 1
T4 - убийца CodeSmith для Microsoft!!!!
Пойдите, проверьте это. Microsoft не хочет уничтожать своих партнеров, чтобы они не рекламировали ее, но с ней нужно считаться и ее БЕСПЛАТНО и устанавливается в Visual Studio 2008.
Я использовал MyGeneration, и мне это нравится для создания кода, который использует Data Access Applicaiton Blocks от Microsoft для моего уровня доступа к данным и сохранения моих концепций баз данных в синхронизации с доменом, который я моделирую. Хотя в один уикенд ему потребовалось более крутой, чем ожидалось, кривой обучения, чтобы сделать его продуктивным.
Мне интересно, что делают другие, связанные с генерацией кода.
http://www.mygenerationsoftware.com
http://www.codesmithtools.com/
Другие?
В 2000 году или около того компания, с которой я работал, использовала продукт Veritas Software (я полагаю, это была) для моделирования компонентов и генерации кода, который интегрировал компоненты (DLL). Я не получал много опыта, но кажется, что генерация кода была "святым граалем" в течение длительного времени. Это практично? Как другие используют его?
Спасибо!
T4 - убийца CodeSmith для Microsoft!!!!
Пойдите, проверьте это. Microsoft не хочет уничтожать своих партнеров, чтобы они не рекламировали ее, но с ней нужно считаться и ее БЕСПЛАТНО и устанавливается в Visual Studio 2008.
Я успешно использовал LLBLGen и nHibernate для генерации уровней Entity и DAL.
Мы используем Codesmith и добились больших успехов. Теперь я постоянно пытаюсь найти, где мы можем реализовать шаблоны, чтобы ускорить мирские процессы.
Я работал с CSLA и использовал codemith для генерации моего кода с использованием шаблонов CSLA.
codesmithtools.com
Если ваша база данных является вашей моделью, SubSonic имеет отличный генератор кода, который по версии v2.1 больше не требует ActiveRecord ( вы можете использовать шаблон хранилища). Он менее гибкий, чем другие, но есть настройки, которые могут быть сделаны в шаблонах запаса.
Я использовал CodeSmith и MyGeneration, тоже не слишком увлекался, чувствовал себя несколько сдержанным, изучая языки шаблонов и т.д.
SubSonic - это то, что мы иногда используем здесь для создания уровня доступа к данным. Используется в проектах с правильным размером, это фантастический инструмент для экономии времени. clicky
Я также вижу, что генерация кода вредна, но только если вы используете сторонние инструменты, такие как codemith и mygeneration. У меня есть 2 хранимых процедуры, которые генерируют мои объекты домена и интерфейсы домена.
Пример
GenerateDomainInterface 'TableName'
Затем я просто копирую и вставляю его в визуальную студию. Работает довольно классно для тех задач, которые мне не нравится делать.
Два фреймворка, которые я часто использую.
Что-то стоит проверить: Ragel. Он использовался для генерации кода для состояний машин.
Вы просто добавляете простую разметку в исходный код, затем запускаете генератор на Ragel генерирует код для C, С++, Objective-C, D, Java и Ruby, и его легко смешивать с вашим обычным источником.
Ragel даже позволяет выполнять код на переходах состояний и т.д. Это упрощает создание формата файла и парсеров протокола.
Некоторые известные проекты, которые пользователь Ragel, Mongrel, отличный рубиновый веб-сервер. И Hpricot, рутинный html-парсер, вроде вдохновленный jQuery.
Еще одна замечательная особенность Ragel заключается в том, как она может генерировать графики graphviz, которые визуализируют ваши государственные машины. Ниже приведен пример из статьи Зед Шоу статья диаграммы состояний рейге.
Диаграмма состояний Ragel http://www.zedshaw.com/tips/HelloMachine_small.png
XMLBeans - это java-привязка к XML. Он получил большой рабочий процесс, и я часто его использую.
XMLBeans обрабатывает xml-схему, описывающую вашу модель, в набор java-классов, который представляет эту модель. Вы можете программно создавать модели, а затем сериализовывать их в и из xml.
Я использовал CodeSmith. Было очень полезно.
Я люблю использовать SubSonic. Открытый исходный код - это способ генерации кода, я думаю, потому что очень легко изменить шаблоны и ядро, поскольку они всегда имеют ошибки или одну или две вещи, которые вы хотите сделать, которые не встроены.
Я использовал генерацию кода для функций swizzle в векторной математической библиотеке. Я использовал для этого пользовательский PERL script. Ни один из генераторов FLOSS, на которые я смотрел, выглядел вполне подходящим для создания функций swizzle.
Я обычно использую шаблоны С++, а не генерации кода.
В основном я использовал LLBLGen Pro для генерации кода. Он предлагает множество шаблонов для использования для генерации, и вы можете предоставить свои собственные паттеры, как и CodeSmith. Поддержка клиентов была превосходной.
По существу, я создаю свои бизнес-объекты и DAL, используя LLBLGen, и сохраняю их в актуальном состоянии. Шаблоны кода имеют разделы, в которых вы можете добавить свою собственную логику, которая не будет уничтожена во время регенерации. Это определенно стоит взглянуть.
Мы настраиваем генерацию кода с использованием литералов linq и XML (VB). Мы еще не нашли способ разбить решения на шаблоны; однако эти две технологии делают эту задачу настолько тривиальной, я не думаю, что мы это сделаем.
Я считаю, что генерация кода вредна, поскольку она раздувает кодовую базу без добавления новой логики или проницательности. В идеале нужно повышать уровень абстракции, использовать файлы данных, шаблоны или макросы и т.д., Чтобы избежать генерации большого количества кодовых табличек котлов. Это помогает быстро выполнить все действия, но в конечном итоге может повредить ремонтопригодность.
Если ваш выбранный язык программирования становится менее болезненным, генерируя его на каком-либо языке шаблонов, это, по-видимому, указывает на то, что вы сэкономите еще больше времени, выполняя работу более высокого уровня в другом, возможно, более динамичном языке. YMMV.
LLBLGen Pro - отличный инструмент, который позволяет вам написать агностическое решение базы данных. Это очень быстро, чтобы подобрать основные функции. Расширенные функции не намного сложнее. Я настоятельно рекомендую вам проверить это.
Я работал в течение четырех лет в качестве основного разработчика в веб-агентстве, как я писал из первых двух или трех веб-сайтов, я скоро понял, что это будет очень скучная задача, чтобы делать это все время, Поэтому я начал писать свой собственный движок генератора веб-сайтов.
Моей отправной точкой был этот сайт http://www.codegeneration.net/. Я взял один из своих примеров для простого генерации crud и расширился до уровня, на котором я создавал с ним целые сайты.
Я использовал xml для определения различных частей веб-сайта (страницы, datalists, объединения, таблицы, управление формами). Сгенерированные веб-сайты были полностью отделены от генератора, поэтому сгенерированный веб-сайт также мог быть изменен вручную.
Вот их статья http://www.codegeneration.net/tiki-read_article.php?articleId=19.
Я сделал несколько одноразовых генерации кода с помощью Castor для создания исходного кода Java на основе XSD. Последнее использование заключалось в создании Java-классов для реализации Open Travel Association. Схема OTA довольно волосатая и была бы медведем, которую можно было бы сделать вручную. Кастор сделал довольно хорошую работу, учитывая сложность схемы.
Я использовал MyGeneration, который использует С# для написания ваших шаблонов кода. Тем не менее, я начал использовать Python, и я обнаружил, что могу писать код, который генерирует другой код быстрее на этом языке, чем если бы я был написан на С#. Впоследствии я использовал Python для кодирования gen С#, TSQL и VB.
Как правило, код, который генерирует другой код, как правило, сложнее следовать по самой своей природе. Синтаксис Python clean чрезвычайно помогает сделать его более читабельным и более удобным, чем эквивалент в С#.
codemith для .net
Я написал утилиту, в которой вы указываете таблицу, и генерирует триггер Oracle, который записывает все изменения в эту таблицу. Делает запись очень простой.
Там еще один, который я написал, который генерирует класс Delphi, который моделирует любую таблицу базы данных, которую вы ему даете, но я считаю это запах кода до сделайте это, поэтому я редко использую его.
В компании мы написали нашу собственную, чтобы генерировать большую часть наших бизнес-классов entity/dalc/business и связанных с ними хранимых процедур, так как потребовалось всего немного времени, и у нас были особые требования. Хотя я уверен, что мы могли бы добиться того же самого, используя существующий генератор, это был забавный маленький проект, над которым можно было работать.
Кодекс был рекомендован многими людьми, и он кажется хорошим. Лично все, что мне нужно от генератора кода, - это упростить внесение изменений в шаблоны.
MyGeneration полностью!
MyGeneration - чрезвычайно гибкий генератор кода на основе шаблонов, написанный на Microsoft.NET. MyGeneration отлично подходит для создания кода для архитектур ORM. Метаданные из вашей базы данных становятся доступными для шаблонов через API MyMeta.
Я использую инструменты hibernate в myEclipse для создания моделей домена и кода DAO из моей модели данных. Кажется, что это работает очень хорошо (есть некоторые проблемы, если вы пишете собственные методы в своих DAO, они, кажется, теряются при перезаписи), но в целом это работает очень хорошо, особенно в сочетании с Spring.
SubSonic отлично! Возможность запроса легко понять, и реализация хранимой процедуры действительно потрясающая. Я мог бы продолжать и продолжать. Это делает вас продуктивным мгновенно.
Я в основном код на С#, и когда мне нужно генерировать код, я делаю это в XLST, когда источник может быть просто преобразован в XML или ruby script, когда он будет более сложным.
Если часть генерации кода нуждается в частых модификациях более чем несколькими разработчиками, CodeSmith работает очень хорошо (и легче освоить, чем XSLT или ruby новыми разработчиками).
Outsystems Agile Platform может использоваться для создания приложений с открытым исходным кодом, хорошо документированных С# и Java. Поскольку у него также есть несколько функций, связанных с развертыванием, управлением и изменением, большинство людей используют его не только для генерации кода, но и для управления полным жизненным циклом веб-приложений.
В течение некоторого времени я использовал родной язык script/template для генерации кода. (Я использовал это в основном не по какой-либо другой причине, кроме как найти использование для моего маленького любимого проекта)
В последнее время я создал несколько сценариев SQL * PLUS для создания кода доступа к базе данных (без Hibernate для нас...)