Считается ли создание кода микро вредоносным? - PullRequest
11 голосов
/ 08 января 2009

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

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

Ответы [ 16 ]

18 голосов
/ 08 января 2009

Если инструмент может выплевывать код без раздумий, то, вероятно, он сэкономит вам много легкомысленного набора текста.

Прежде всего, для написания инструмента нужно подумать, поэтому я думаю, что вы будете более внимательны при обслуживании и написании инструмента.

10 голосов
/ 08 января 2009

Это хорошо! Конечно, написать инструмент, который сделает всю работу за вас, невозможно и неправильно.

Но автоматизация повторяющихся задач всегда хороша - и иногда написание определенных типов кода повторяется.

Это даже поощряется в книге "Прагматичный программист" .

Убедитесь, что в контроллере исходного кода вы проверили генератор кода, а не его вывод (если только вам не придется изменять код вручную)!

7 голосов
/ 08 января 2009

Вы определенно не ошиблись. Я использую генераторы кода везде, где могу - в настоящее время я использую CodeSmith для создания своих DAO, просматривая базу данных.

Какое преимущество вы боитесь потерять? По-моему, генерация кода на самом деле дает преимущество.

4 голосов
/ 08 января 2009

Ларри Уолл (из славы Perl) описывает три основных достоинства программирования: лень, нетерпение и гордыня.

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

2 голосов
/ 08 января 2009

Ваш генератор кода (по крайней мере, в принципе - я сам на него не смотрел) - Правильная вещь, по крайней мере, насколько это возможно.

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

2 голосов
/ 08 января 2009

Тратить меньше времени на то, чтобы сделать что-то / кто-то другой, и больше времени на поиск лучших способов сделать это, как правило, приведет к лучшему.

Это не относится только к программированию ....

2 голосов
/ 08 января 2009

Генерируйте то, что можете. Генерация кода - один из лучших инструментов, которые я выбрал за последние 2 или 3 года. Повторный ввод одного и того же кода (или его копирование и вставка) подвержен ошибкам.

1 голос
/ 08 января 2009

Мои 2cents на коде gen таковы, что это также важно для использования в рефакторинге. Я обнаружил, что необходимы частичные классы и хорошая утилита сравнения файлов (Araxis или BeyondCompare).

Храните сгенерированный код в одном файле и пользовательские настройки, которые вы сделали для этого класса, в другом файле.

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

CodeSmith FTW!

Несмотря на то, что серверы сборки великолепны для обеспечения компиляции всего вашего кода, они не учитывают различия в сигнатурах с вашими хранимыми процессами и т.п. Если вы регулярно запускаете code gen, вы можете легче определить, когда происходят эти изменения. Модульное тестирование покажет вам, что SP не прав, а code gen скажет вам, как сделать это правильно.

1 голос
/ 08 января 2009

Я считаю, что написание кода gen помогает мне узнать нюансы хорошей архитектуры. Вы начинаете видеть общие шаблоны, а не узкий взгляд на ваш дизайн. Тем не менее, не используйте code gen вместо хорошего объектно-ориентированного кода и не любите ваш gen настолько сильно, что игнорируете новые технологии. Например, если вы работаете в .NET и пишете код для доступа к данным, вам лучше найти оправдание тому, чтобы не использовать Linq для SQL или NHibernate. Аналогично, динамические данные могут помочь во многих сценариях форм на данных. Итак, мой совет: добавляйте новые вещи и генерируйте код по мере необходимости.

1 голос
/ 08 января 2009

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

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

...