Должен ли «сгенерированный код» использоваться только для строительных лесов? - PullRequest
1 голос
/ 15 февраля 2010

Когда система генерирует исходный код, который используется системой, должен ли этот код использоваться только для строительных лесов (как в рельсах), где пользователь «заполняет пробелы», или есть случай для сгенерированного кода, который создается и никогда не исправляется никем, кроме генератора кода.

Ответы [ 7 ]

6 голосов
/ 15 февраля 2010

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

  • RPC-код, сгенерированный rpcgen
  • Сериализаторы (de), сгенерированные protobuf
  • Код сборки, сгенерированный вашим компилятором C / C ++
  • Код отображения .NET XML, сгенерированный xsd.exe
  • Сгенерированный код связующего клея Swig
  • Код GUI, сгенерированный инструментами конструктора.
2 голосов
/ 17 февраля 2010

A Хороший генератор кода основан на шаблонах, а не на черном коробочном решении, подобном приведенному выше. У вас также должен быть способ активной регенерации без потери ваших изменений. Я думаю, что генератор кода должен быть и тем и другим, он должен предусматривать закрытую (только для чтения, но изменяемую) систему, в то же время позволяя изменять функциональность или поведение при необходимости с помощью шаблона.

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

Спасибо Блейк Немийский

2 голосов
/ 15 февраля 2010

Это зависит от вашего генератора кода:

  • Если генерация кода является деструктивным процессом (т. Е. Все, что вы изменили, потеряно), сгенерированный код не должен изменяться.

  • Если генерация кода позволяет заполнять пробелы и запоминать их содержимое во время процесса генерации кода, вы можете использовать его в качестве основы (если вы изменяете только идентифицированные пробелы).

1 голос
/ 17 февраля 2010

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

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

1 голос
/ 15 февраля 2010

Ни одного правильного ответа на этот вопрос.

Как правило - пользователь никогда не должен касаться сгенерированного кода, в случае если он регенерируется, перезаписывая все пользовательские изменения.

Если это одноразовое поколение и никогда не будет сделано снова, тогда непременно измените его. Но если ваш язык поддерживает это, внесите изменения в отдельный файл (например, C # позволяет иметь класс, охватывающий несколько файлов, как «частичный» класс).

1 голос
/ 15 февраля 2010

Если вы создаете GUI в Java с Netbeans, то в коде есть части, которые не должны изменяться разработчиком, иначе построитель GUI больше не будет работать должным образом.

Я полагаю, что это такой случай, и (большинство?) Построители графического интерфейса работают именно так.

0 голосов
/ 21 марта 2018

Если вы не трогаете сгенерированный код, вы не можете использовать генератор до конца процесса разработки, за исключением недавно добавленных частей. Как разработчик я должен использовать генератор кода при разработке проекта. Zontroy является хорошим примером для удовлетворения этого требования. Используя «защитный блок», вы можете сохранить свой собственный код внутри сгенерированного файла. В результате вы можете восстановить все файлы кода, когда вам нужно.

...