Как создатель T4, мне приходилось защищать этот вопрос несколько раз, как вы можете себе представить: -)
Я считаю, что в лучшем случае генерация кода - это шаг на пути к созданию эквивалентной стоимости с использованием повторно используемых библиотек.
Как уже говорили многие, ключевой концепцией поддержания DRY никогда не является изменение вручную сгенерированного кода, а скорее сохранение способности к регенерации при изменении метаданных источника или при обнаружении ошибки в генераторе кода. На этом этапе сгенерированный код обладает многими характеристиками объектного кода, и у вас не возникает проблем с типом копирования / вставки.
Как правило, гораздо меньше усилий для создания генератора параметризованного кода (особенно для систем на основе шаблонов), чем для правильной разработки высококачественной базовой библиотеки, которая снижает затраты на использование до того же уровня, поэтому это быстро способ получить значение из согласованности и удалить ошибки повторения.
Тем не менее, я все еще верю, что готовая система чаще всего будет улучшена, если будет меньше общего кода. Если бы не что-то иное, его объем памяти почти всегда был бы значительно меньше (хотя люди склонны считать генерики бесплатными в этом отношении, чего, скорее всего, нет).
Если вы поняли какую-то ценность с помощью генератора кода, то это часто дает вам время, деньги или гудвил, чтобы инвестировать в сборку библиотеки из сгенерированной базы кода. Затем вы можете постепенно перепроектировать генератор кода, чтобы настроить таргетинг на новую библиотеку и, надеюсь, сгенерировать гораздо меньше кода. Сполосните и повторите.
Один интересный контрапункт, который был сделан мне и который возникает в этой теме, состоит в том, что богатые, сложные, параметрические библиотеки не являются самой легкой вещью с точки зрения кривой обучения, особенно для тех, кто не глубоко погружен в платформу. Придерживаясь генерации кода на более простых базовых платформах, можно получить подробный код, но он часто может быть довольно простым и легким для чтения.
Конечно, если в вашем генераторе много дисперсий и чрезвычайно богатых параметров, вы можете просто поменять сложность на свой продукт на сложность в своих шаблонах. Это простой путь, по которому можно перейти, и он может сделать техническое обслуживание такой же головной болью - следите за этим.