В предыдущих лекциях мы рассмотрели концепцию генерации кода, ее преимущества и недостатки, были показаны примеры. Изучены технологии генерации, такие как CodeDom, T4. Также была рассмотрена технология
С чего начать применение генерации кода? С технологической точки зрения, при отсутствии опыта желательно выполнять манипуляции текстом. Этот простой способ не потребует изучения и овладения специфическими технологиями генерации кода. Для разработки генератора вполне хватит знаний и опыта, достаточных для разработки проекта вручную. Какое содержимое лучше генерировать? Для начала лучше генерировать не все приложение, а только ту его часть, которая легко поддается генерации. Обкатка техник генерации на небольшом участке кода приложения позволит быстрее ввести генератор в действие, осознать его преимущества, избежать ошибок на ранней стадии проекта. Риск и потери времени в случае неудачи будут минимальными. Выбирайте ту часть приложения, которая имеет наибольшую повторяемость участков кода. Например, уровень базы данных. Когда убедитесь в эффективности применения генераторов для вашего проекта и найдете пути ее достижения, вы можете расширить области применения генератора.
Начинать применение генерации кода можно также на небольших одноразовых работах рутинного характера. Хорошими кандидатами на применение генерации являются проведение рефакторинга, изменение форматирования, оптимизация кода. При исполнении этих задач могут выполняться относительно простые изменения кода, но которые присутствуют в большом количестве и серьезно влияют на качество приложения. В случаях переименования переменных, изменения стандартной функциональности в большом количестве модулей, изменения структуры кода и других подобных действий ручное обновление будет долгим и рутинным по сравнению с реализацией генерации. Нужно только создать небольшой генератор, который преобразует стандартный существующий код в стандартный код в новом формате.
Теперь рассмотрим случаи, когда можно точно сказать, что генерация кода даст преимущества и наоборот, когда генерация будет точно неэффективна. Также рассмотрим методы оценки эффективности применения генератора в тех случаях, когда заранее сложно определить целесообразность его применения.
Наличие большого объема устойчивых шаблонов, хорошая стандартизированность стиля кода свидетельствует о том, что приложение является хорошим кандидатом на генерацию. Практически всегда выгодно генерировать код баз данных, код манипуляции данными, или любой другой зависящий от них код. Перечислим вкратце условия и конкретные случаи, когда применять генератор выгодно:
С уверенностью можно сказать, что применение генератора не дает преимуществ в следующих случаях:
При оценке повторяемости хорошо также взвешивать повторяемость кода не только внутри приложений, но и внутри целой группы приложений, которыми вы возможно занимаетесь. Даже если какая-то функциональность не повторяется в границах одного приложения, она может встречаться в других приложениях. В этом случае разработанный генератор и шаблоны можно полностью или частично применять для генерации других приложений.
Во всех остальных случаях взвешивать за и против, оценивать и сравнивать надо:
Все вышеперечисленное надо взвесить и принять решение о применении генератора.
В силу специфики генерации кода возникают самые разные толкования и убеждения, которые являются либо ложными, либо не совсем верными. Также они возникают из-за того, что генерация кода не так часто используется при реализации программных проектов и у разработчиков мало практического опыта в этой области. Понимание и работа с предвзятыми мнениями является важным для правильной организации работы, обучения и настроя разработчиков. Итак, перечислим и рассмотрим наиболее часто возникающие предубеждения.
Генератор оставит программистов без работы. Нужно понимать, что генератор не отменяет программирование вообще, он только устраняет необходимость проведения рутинной работы по созданию многочисленных похожих блоков кода. Время программиста освобождается для выполнения более уникальных и интересных задач. Разработка и усовершенствование самого генератора также является нетривиальной и интересной задачей. В любых приложениях всегда есть много областей приложения сил для дальнейшего усовершенствования, оптимизации и расширения. И даже при применении генератора здесь останется много работы по развитию и улучшению приложения. Освободившиеся временные ресурсы следует использовать как раз для этой цели.
Сгенерированный код плохо поддается контролю. Могут возникать опасения, что сгенерированный код будет малопонятным кодом громадного объема, который создается за секунды и поведение которого непредсказуемо. Следует отметить, что подобные соображения могут появиться только тогда, когда разработчик плохо представляет, какой код ему нужен и по каким шаблонам создается сгенерированный код и насколько они соответствуют друг другу. В сгенерированном коде разработчик должен разбираться так, как будто он сам написал его вручную. Понимание кода должно быть на таком же уровне, а генератор только устраняет необходимость создавать его вручную. Фактически, генератор создает тот же код, который разработчику пришлось бы написать вручную, только теперь это делается быстрее и эффективнее. Насчет непредсказуемости поведения можно сказать, что для исключения подобной ситуации генератор можно использовать еще и для тестирования. Сам генератор тоже должен быть тщательно протестирован. При таком подходе подобные опасения становятся необоснованными.
В работе генератора полностью разбирается только его разработчик. Когда генератор разрабатывается одним человеком, то возникают справедливые опасения, что стоит ему покинуть группу, как генератор перестанет использоваться. Чтобы этого не происходило нужно уделять достаточно внимания качественному обучению (все заинтересованные лица должны свободно разбираться в работе генератора) и более интенсивному внедрению генерации в процесс разработки.
Требования к приложению и его архитектура определены не до конца. Тот факт, что структура приложения еще не определена и требования окончательно не выработаны, может служить контр-мотивацией к началу разработки генератора. В результате пройдет много времени пока структура приложения станет более ясной, и создание генератора начнется запоздало. Такой подход не является продуктивным. Разработку генератора нужно выполнять, даже если архитектура проекта не является законченной, использовать для этого информацию, известную на данный момент. Это позволит увидеть и опробовать предварительный вариант кода проекта уже на ранней стадии и избежать ошибок проектирования, добавит доверия к генератору. Когда информации о приложении станет больше, достаточно будет изменить генератор и шаблоны.
Код приложения слишком сложен или велик для того, чтобы его можно было сгенерировать. Даже в случае очень сложных приложений практически всегда присутствует часть кода, в которой содержится стандартная функциональность. Стандартизация и разбиение кода на уровни позволяет упростить отдельные компоненты приложения и повысить удобство их генерации. К тому же в большинстве приложений используются базы данных, которые являются идеальными кандидатами на генерацию. И даже если базы данных не используются (что бывает редко), все равно могут применяться другие структуры для хранения, ввода-вывода данных. Подобные структуры также хорошо поддаются генерации.
Сгенерированные запросы SQL будут неэффективными. Эффективность запросов может быть повышена за счет
Усилия, затраченные на разработку генератора, могут оказаться непомерно большими. Чем больше и масштабнее проект, тем больше выгод для него дает генерация кода, особенно на начальном этапе. Для небольших же проектов разработка генератора действительно может дать меньше эффекта вследствие меньшего объема генерируемого кода. Однако даже в этом случае есть факторы, которые могут перевесить данное обстоятельство. Затраты времени не являются единственным, хотя и очень важным показателем для принятия решения о применении генератора. Другими факторами являются значительно улучшенная согласованность кода, его качество и
Не хватает навыков для разработки и применения генератора. Могут возникать опасения, что разработка генератора окажется сложным делом и потребует специальные навыки и знания. Фактически же потребуется следующее:
Как видим, эти знания и навыки в любом случае требуются программисту, внедряющему проект. Также могут помочь, но не являются обязательными, технологии вроде T4 и
Даже в самом благоприятном случае применения генератора всегда будет существовать часть кода, которая написана вручную. Это может быть библиотека функций, реализация какого-нибудь специального алгоритма, или например, модуль безопасности приложения. Особенно это касается тех приложений, архитектура которых имеет сложную структуру и большое число нюансов и деталей.
Если для таких приложений стараться использовать только автоматическую генерацию, то потребуется создание новых шаблонов для каждого особенного случая в приложении. Такое занятие будет крайне неэффективным с точки зрения затрат времени. Гораздо проще каждый уникальный неповторяющийся код написать вручную.
Наличие в системе как ручного, так и автоматически сгенерированного кода порождает необходимость согласования их взаимодействия, а также различения их друг от друга в процессе разработки и обновления существующего кода.
Одной из главнейших задач при этом является обеспечение невозможности замены актуального ручного кода устаревшим сгенерированным. Другой задачей является сведение к минимуму ситуаций, когда сгенерированный код заменяется ручным. Такие ситуации становятся возможными, когда сгенерированный код модифицируется вручную и осуществляется плохой контроль и разделение ручного и сгенерированного кода. Если впоследствии код генерируется заново и сохраняется, то ручные модификации могут быть утеряны. Это создает необходимость:
Необходимо понимать, что плохой контроль и отсутствие четкого разделения ручного и автоматически сгенерированного кода могут привести к крайне нежелательным последствиям.
Потери ручного кода могут возникать также при переводе старого ручного кода на автоматический. Может оказаться, что не все возможности старого кода были внедрены в автоматический, либо это было сделано некорректно. Одним словом, необходимо создать систему контроля и тестирования кода.
Рассмотрим основные способы разделения ручного и сгенерированного кода:
Если генератор закуплен у стороннего поставщика или будет применяться не самим разработчиком, а другими специалистами, то их обучению следует уделить особое внимание. Ведь настройка созданного сторонним производителем генератора для целей вашего проекта может потребовать немало усилий. Без обучения в такой специфической области, как генерация кода высока вероятность, что разработчики будут испытывать трудности технического, а руководители организационного характера. Целью обучения является доведение до пользователей генератора следующей информации:
Обучение проводится в виде семинаров, тренингов, бесед, составления и раздачи учебных материалов.
Обучение поможет лучше понять генерацию кода и избежать искаженных оценок ее применения. Например, может встречаться скептическое отношение к ней. Либо от нее ожидают выполнение функций, которые имеют мало общего с реальностью. В результате это может привести к ошибкам и разочарованию. Вообще, при применении генератора могут возникать интересные и неоднозначные мнения с широким разбросом. Ее могут воспринимать как полезный дополнительный инструмент, не влияющий существенно на процесс разработки. Часто встречается мнение, что легче разработать код самому, чем тратить время на изучение генерации. Может возникать отношение к генератору как к удачной находке, воспользовавшись которой можно затратить освободившееся время на свои личные дела и о которой руководство не должно ненароком узнать.
По этим причинам хорошее обучение и равноценное вовлечение как можно большего числа программистов в разработку и использование генератора является очень важным.
Если генератор неудобно использовать, устанавливать, настраивать, либо он работает ненадежно, это будет серьезным препятствием к тому, что генератор вообще будет применяться. Особенно это касается добавления и изменения метаданных и шаблонов. Нет смысла в избавлении от рутинной работы путем применения генератора, если это впоследствии оборачивается затрудненной и проблематичной настройкой самого генератора. Даже если такой генератор дает выигрыш во времени, недоверие к его работе может привести к прекращению его использования. Тот факт, что генератор кода применяется преимущественно программистом, не значит, что необязательно уделять много внимания удобству, простоте применения и восприятия работы генератора. Наоборот, удобный интерфейс увеличит эффективность работы программиста. А это не может не сказаться положительно на проекте. С точки зрения практического применения генератор должен обладать следующими свойствами:
Генератор должен подсказывать инженеру, что было сделано, какой код был создан или изменен. Обязательно должны поддерживаться настройки по умолчанию, что существенно облегчит ввод метаданных. Крайне желательно создать удобный графический интерфейс.
Хорошей практикой при генерации кода является организация шаблонов в единую систему и передачу метаданных таким образом, чтобы код генерировался одним нажатием клавиши или одной командой. Для создания такого процесса необходимо:
Вложенные шаблоны удобно применять, так как становится возможным вызывать одни шаблоны из других. Эти шаблоны-потомки могут применяться также внутри других больших шаблонов. Если возникнет необходимость сделать одинаковые изменения в нескольких похожих шаблонах, достаточно идентичные места в них сделать вложенным шаблоном и делать изменения только в нем.
Программным путем можно пройтись в цикле по всем метаданным и применить
Создать подробную документацию на генератор необходимо для того, чтобы заинтересованные лица могли получать полную исчерпывающую информацию в любой момент времени. Документация как минимум должна содержать следующие сведения:
Кроме того нужны
Если вы не являетесь единственным, кто использует генератор, то наличие документации значительно облегчит освоение применения генератора другим пользователям и повысит успешность применения генератора. Отсутствие документации будет существенно тормозить его развитие и распространение для более широкого применения. И даже если вы все-таки единственный, кто применяет генератор, в случае вашего ухода письменная информация о генераторе окажет большую помощь вашему преемнику.
Рассмотрим моменты, которые важно соблюдать при проектировании, разработке, внедрении и применении генераторов:
Генератор можно не только разработать, но и приобрести, либо применять генератор с открытым исходным кодом. Рассмотрим плюсы и минусы самостоятельной разработки в сравнении с покупкой генератора.
Самостоятельная разработка. Плюсы:
Минусами самостоятельной разработки являются:
Покупка генератора. Плюсами являются:
Минусами при покупке генератора являются:
Также рассмотрим плюсы и минусы применения бесплатного генератора с открытым исходным кодом. Они практически те же, что и при покупке генератора, но имеются дополнительные плюсы и минусы.
Плюсы применения бесплатного генератора с открытым исходным кодом:
Минусы применения бесплатного генератора с открытым исходным кодом:
До недавнего времени создание программного обеспечения напоминало изготовление товаров в средние века ремесленниками. Средства, позволяющие хоть как-то автоматизировать их труд, применялись ограниченно, либо вообще не применялись. В те времена, как и сейчас при создании программного обеспечения, качество товара и время, затраченное на его производство, в большей мере зависело от мастера, его опыта и умений, чем от технологического процесса. Сегодня программирование в какой-то степени является интеллектуальным ремесленничеством. В настоящее время намечается переход от ремесленного типа программирования к промышленному. Не утихают попытки автоматизировать производство программного обеспечения, генераторы кода применяются все шире, развиваются дисциплины метапрограммирования, порождающего программирования, фабрик приложений. Даже создаются генераторы генераторов, то есть программы, генерирующие генераторы кода.
И хотя многое сделано в этом направлении, надо пройти еще больший путь к полной автоматизации программирования. Неизвестно сколько времени на это уйдет, какие препятствия и подводные камни еще встретятся.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.