Хочу сегодня поговрить об очень перспективном направлении в программировании - кодогенерации.
Эти мысли пришли ко мне в голову после того, как я начал пректировать новую версию движка для сайта devoid.com.ua.
Для реализации выбрал популярный сейчас паттерн Model-View-Controller.
Используя такой подход, программисту необходимо реализовать “Model” - модель представления данных. Для этого чень полезной является реализация класса-оболочки для работы с Базой Данных, которая предоставляет механизмы извлечения данных, добавления, удаления и редактирования записей.
Если посмотреть немного дальше и представить что при каждом новом проекте нужно будет писать новый класс-оболочку для Баз Данных, который будет выполнять практически стандартные функции - становится как-то грустно, ведь всегда интереснее решать разнообразные задачи, а не писать по сути одинаковые классы, которые будут получать информацию с БД, добавлять, удалять и редактировать записи.
Именно здесь нам на помощь приходит кодогенерация, которая для реализации слоя доступа к данным (Data Access Layer) генерирует на основе описания таблиц БД класс, который содержит в себе необходимые функции для реализации Model из паттерна MVC.
Уже сейчас существует ряд готовых решений, которые предлагают вам создавать классы для работы с данными на основе описания структуры БД. Если вы хотите избавиться от рутинной работы создания классов для работы с БД - можете написать свой генератор или использовать уже имеющиеся (это могут быть и консольные решения, и Win-приложения и те же PHP-скрипты, кому как удобнее).
Все что необходимо генератору кода - это описание базы данных, выполненное в удобном формате (как вариант XML). В описании нужно указывать имена столбцов, тип данных, которые они содержат. Если вы сами пишете генератор, то позаботьтесь о том, что б он был безопасный к различным типам данных и имел достаточную функциональность.
Любому программисту будет удобнее выполнить простой код:
$user->create(”UserName”,”Mail”… остальные поля);
чем делать это вручную каждый раз. То же самое и с редактированием, удалением. Намного приятнее выполнить
$user->remove(’user_id’);
а все, остальное за вас сделает сгенерированный класс.
Здесь даже не столь важным является язык реализации, или конкретная База Данных. Основной изюминкой является реализация данного процесса, и избавление программиста от рутины. Один раз ГРАМОТНО написав генератор, вы получаете готовую модель работы с данными для каждого проекта, а сэкономленное время с удовольствием можно потратить на разработку новых интересных решений и сосредоточиться на реализации представления данных пользователю.
Надеюсь кое-как смог выразить свои мысли по этому поводу в данной заметке, и натолкнул вас на что-то новое и интересное в безграничном мире программирования
Да, и не забудьте поздравить женщин с их праздником сегодня…
Всех женщин поздравляю с праздником и желаю внимания, любви и удачи!
21.03.2008 в 17:49
надо написать то, что будет само генерировать код - просто искуственный интеллект o_O
23.03.2008 в 14:26
Ну до кодогенерации конечно далеко. Просто при использовании ORM (Object-relational mapping) действительно можно использовать скриптики, которые сделают “отображение” структуры таблицы в виде класса с соответствующими get и set. Жаль, но много запросов все равно надо писать вручную, да и надо ли мне все поля в классе?
А вообще, если касаться вопроса кодогенерации, то я больше склоняюсь к “заготовкам”, то есть блокам кода, которые можно перетащить по средствам drug&drop себе в код (например в Студии той же).
29.03.2008 в 00:11
Ну до кодогенерации конечно далеко.
—–
Ну куда там далеко. Года три назад посмотрели существовавшие на то время прототипы, выбрали один в качестве базового и за полгода нарастили до продуцирования полного веб-приложения. Работали - полтора человека. Так что - никаких проблем.
да и надо ли мне все поля в классе?
—–
Не только надо, но и мало. В частности, при подстановке информации из связанной таблицы, тебе потребуется добавить поле, для хранения этой информации.
я больше склоняюсь к “заготовкам”, то есть блокам кода, которые можно перетащить
—–
Нафиг-нафиг… копаться в 150-200Мб сгенерированного кода и сутками перетаскивать/подставлять куски… брррр…
Вот над чем сейчас раздумываю - как определить куски XSLT, обернув их XMLом с дополнительной информацией и собрать из кусков XSLT, который, обрабатывая дамп из упомянутой системы, сгенерирует нужный выход.
06.04.2008 в 23:13
привет! есть такая штука, толи в symfony толи в ruby on rails, по описанию на xml генерирует класс user
02.05.2008 в 02:50
odalex
вообще-то тут совершенно другое!
14.06.2008 в 23:29
Метапрограммирование как-то удобнее, по-моему.
Хотя, кодогенерация, по сути, и есть матапрограммирование, только в размазанном и разделенном виде.