Вы используете инструменты генерации кода?

10
задан therealhoff 27 September 2008 в 18:58
поделиться

20 ответов

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

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

Код, который сгенерирован при создании Windows Form в Visual Studio, приходит на ум. Можно посмотреть на сгенерированный код, если Вы хотите, но это - лучшая идея не к. Перемещение в декларативный язык с WPF было выше, однако, потому что это более чисто и более надежно для управления декларативным кодом программно, чем обязательный код.

Они должны были сделать то же самое с классами LINQ-SQL. Им нужен декларативный язык для классов, которые просто имеют свойства и никакое пользовательское поведение. Это, вероятно, помогло бы сделать те классы объекта динамичными - изменяющийся автоматически, когда базовая схема базы данных изменяется.

Мы попытались использовать CodeSmith для генерации.NetTiers классов для всех таблиц в нашей базе данных, но столкнулись с двумя проблемами:

  1. .NetTiers был чрезмерно увеличен в размере, и сгенерированный код был огромен. Я думаю, что инструменты генерации кода делают это слишком легким к созданию feep.

  2. Поскольку схема активно разрабатывалась и пересматривалась, мы должны были повторно создать много также, и это закончило тем, что делало очень трудным сохранить все в управлении исходным кодом, потому что все файлы повторно создавались и заменялись. Я закончил тем, что был не уверен, если сгенерированный код должен быть в управлении исходным кодом вообще.

Лучшее место для генерации кода должно быть в компиляторе или фазе разработки, не стадии проектирования. При использовании анонимного типа или метода в C# компилятор делает генерацию кода на лету. Если Вы генерируете код во время стадии проектирования, Вы получаете блок материала, который должен быть повторно создан каждый раз базовое изменение параметров.

9
ответ дан 3 December 2019 в 13:16
поделиться

Если заинтересовано LLBLGEN, который превосходен, Вы могли бы также оценить дозвуковой. Возможно, даже посмотрите то, что Rob Conery должен сказать о любом перекрытии или взаимодействии между дозвуковым и t4.

0
ответ дан 3 December 2019 в 13:16
поделиться

Как некоторые другие здесь, мы также создали наш собственный генератор кода (Inon Datamanager/Viewmanager) для доступа к данным, обработки HTML-формы и определенных операций бизнес-логики. Ключ к наличию этой работы хорошо должен разработать его так, Вы никогда не должны затрагивать или смотреть на сгенерированный код.

Таким образом это почти становится частью языка - язык (Java в нашем случае) расширяется для включения спецификации модели предметной области и viewmodel, и затем Вы просто заполняете пользовательскую бизнес-логику с реальным кодом Java.

Это дает нам правильные инструменты для общения с аналитиками и бизнес-пользователями, все еще имея власть Java настроить детали базового поведения.

0
ответ дан 3 December 2019 в 13:16
поделиться

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

От этого был бы сгенерирован тест jUnit.Прекрасно.

За исключением того, что ни один человек не потрудился использовать его, и я не собрал тестовых сценариев whatseover.

0
ответ дан 3 December 2019 в 13:16
поделиться

Я использовал для генерации сериализуемых объектов данных, которые могли быть преобразованы через различные платформы (окна, Linux, solaris, Mac, bsd, и т.д.). Это было внутреннее решение.

0
ответ дан 3 December 2019 в 13:16
поделиться

Мы только что начали использовать Grails здесь в офисе. Ранее, у нас был ряд внутренних сценариев поколения CRUD JSF/Hibernate.

... Победы Grails. Генерация кода от Grails очень хороша и может получить Вас Приложение типа CRUD, входящее приблизительно в 15 минут, на самом деле не помещая код в файлы кода!

Конечно, это, CAN генерирует фактический код в файлы кода, когда Вы хотите изменить его. Большую часть времени, для регулярного CRUD, можно сойти с рук просто изменение представлений.

0
ответ дан 3 December 2019 в 13:16
поделиться

В предыдущем работодателе у нас было приложение VB.NET собственной разработки, которое повернет файл определения схемы XML (XSD) в статическую библиотеку C++. Это сделало намного легче работать с типами данных C++ (bool, станд.:: строка, и т.д.), и весь интересный код XML был скрыт в этих сгенерированных классах.

0
ответ дан 3 December 2019 в 13:16
поделиться

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

Мы также генерируем веб-сервисы для надлежащего взаимодействия через интерфейс с Flash - т.е. обрабатывающее исключение нормальным способом.

Наконец у нас есть генератор исключения, который устраняет тяжелую работу лучших практик исключения (тонны конструкторов, и т.д....)

0
ответ дан 3 December 2019 в 13:16
поделиться

Я встретил ActiveWriter несколько месяцев назад, и помогло мне очень, что я люблю, гибкость этого подхода, это генерирует частичные классы, которые обрабатывают проблемы доступа к данным, и это позволяет мне кодировать бизнес-часть классов. Я чувствую, что очень удовлетворенная причина сохраняет меня большая работа, довольно хорошо изменить схему, повторно создать и продолжиться.

1
ответ дан 3 December 2019 в 13:16
поделиться

Мы используем LLBLGen для создания нашего уровня доступа к данным. Вы указываете на генератор на базу данных Ваше использование, выбираете, какие таблицы Вы хотите использовать, и это производит в большом количестве необходимые классы. Это все очень быстро и легко.

1
ответ дан 3 December 2019 в 13:16
поделиться

Я создаю свои собственные инструменты для некоторых задач. Его забава сделать и даже экономит время в конечном счете. Для очень тусклых задач это даже сохраняет Вашу исправность.

1
ответ дан 3 December 2019 в 13:16
поделиться
  1. Мы используем Генераторы кода для Исключений
  2. Генерация ДАО для операций CRUD
  3. используйте JAXB для кода genereate
  4. Используйте XDoclet для genereate EJB локальные/домашние интерфейсы
  5. Используйте Скоростные шаблоны для генерации документации для бизнес-моделей
  6. Используйте Ось Apache для генерации тупиков WSDL
1
ответ дан 3 December 2019 в 13:16
поделиться

Мы раньше использовали CodeSmith для генерации нашего NHibernate hbms, наших объектов и нескольких других вещей. Через некоторое время мы устали от этого потока, таким образом, мы угробили его.

Генератор T4 свободен и стоит изучить для поколения.

Мы все еще используем замок CodeGenerator для поколения ссылки MonoRail.

1
ответ дан 3 December 2019 в 13:16
поделиться

Генерация кода в духе компиляторов может быть большой. Генерация кода в духе "мастеров" однородно оказалась плохой идеей.

4
ответ дан 3 December 2019 в 13:16
поделиться

Так как внутреннему языку программного обеспечения Ручья Вуали, Васаби, встроили генераторы кода времени компиляции, мы используем их для автоматического создания сути наших классов объекта та карта к таблицам базы данных. Таким образом вместо того, чтобы писать класс с дюжиной различных свойств и методов, мы можем просто записать:

<ActiveRecord("Kiwi")> _
Class CKiwi
End Class

и CKiwi будет иметь Загрузку (ix Как Int32), Фиксация (), и поля/свойства для каждого столбца определенный в его базовой схеме для новозеландской таблицы. Это мешает нам иметь, чтобы иметь огромные библиотеки O/R M, но все еще позволяет нам быстро добавлять таблицу к нашим продуктам.

5
ответ дан 3 December 2019 в 13:16
поделиться

Я начал прокручивать свои собственные генераторы (доступ к данным, sprocs, и т.д.) назад, когда я делал классическую работу asp (приблизительно 2001). Я медленно перемещался в CodeSmith, так как было намного легче иметь дело с. Я все еще, прежде всего, просто генерировал весь материал типа Уровня доступа к данным (включая sprocs) для моего кода.NET.

Пара несколько лет назад, я сделал переход из Макро-Генерации кода (т.е. CodeSmith) к Микро Генерации кода.

Различие - то, что с CodeSmith я генерировал огромные ряды кода для моего приложения, всего дженерика, и внезапно. Это стало проблематичным для пограничных случаев и регенерации при изменении источника для шаблона (т.е. структура таблицы). Я также столкнулся со случаями, где были высокие материально-технические ресурсы переноса кода, который я не использовал, но был сгенерирован из моего шаблона. Все те методы работали? Возможно, возможно, нет. Вход и чистка сгенерированного кода были бы огромным объемом работы (т.е. после больше чем года на той же кодовой базе).

Микро Генерация кода, напротив, позволяет мне генерировать точно классы, в которых я нуждаюсь в точно правильном сценарии, который я хочу. Основной инструмент, который я использую, чтобы сделать, это - ReSharper. Путем я делаю это путем записи моих модульных тестов прежде, чем написать мой производственный код. В том сценарии ReSharper использует мой Модульный тест в качестве шаблона, чтобы автоматически сгенерировать каркас для производственного кода. Затем это - просто вопрос восполнения пробелы.

Для Доступа к данным я ничего больше не генерирую. Я нашел, что хороший O/R M заменяет все, что я раньше вставлял мой уровень доступа к данным (т.е. NHibernate). Учитывая, что, я никогда не буду писать или генерировать другой уровень доступа к данным в своей жизни (я отказываюсь к).

Плюс, я извлекаю пользу из наличия большого комплекта модульного теста, среди прочего

5
ответ дан 3 December 2019 в 13:16
поделиться

Не то, чтобы мы работаем в домене .NET/сети, но самодельные инструменты генерации кода с различных разработанных на основе дома языков являются ключевой ролью нашей цепочки средства разработки. У нас есть два главных такие инструменты (с грамматиками и синтаксическими анализаторами и формальными определениями), и хост незначительного основывался на макросах как m4 и жемчуг. Они все генерируют плоскость C в конце, который исходно компилируется.

Проблемно-ориентированные языки являются одним из ключевых инструментов для производительности программиста для любого крупномасштабного усилия программного обеспечения, по моему опыту. При создании вещей как компиляторы средства моделирования или другое очень сложное программное обеспечение со многими повторяющимися шаблонами, которые не имеют никакой поддержки вообще на языках Бэйсик (который обычно означает портативный C и иногда C++), генерирующиеся инструменты кода являются способом пойти. Я просматриваю проблемно-ориентированные языки как следующий шаг в обобщении: сначала Вы вспыхиваете общие вычисления в функции (или подпрограммы, чтобы быть историческим), затем Вы вспыхиваете общие функции в шаблоны или дженерики, если такое средство доступно, и затем Вы вспыхиваете еще больше общности и повторяющий код на полноценный пользовательский язык.

Это - все о сокращении объема кода, который Вы на самом деле пишете, и удаляющий любую форму утомительного повторения и кода нес добавленной стоимостью от процесса программирования. Как только повторение шаблонов, примените проблемно-ориентированный язык!

7
ответ дан 3 December 2019 в 13:16
поделиться

Да, но мы называем их интернами.

24
ответ дан 3 December 2019 в 13:16
поделиться

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

Посмотрите Инструменты для Создания Тестов для одного примера.

1
ответ дан 3 December 2019 в 13:16
поделиться

Я написал и использую инструмент генерации кода на основе Xslt. http://perfectstorm.codeplex.com/

Здесь используется однокорневая xml-модель для генерации dal, procs, таблиц.

0
ответ дан 3 December 2019 в 13:16
поделиться