Объектно-реляционный проектор собственного изготовления
В последних статьях заметил проявленный интерес к прослойкам между приложениями и базами данных. Решил поделиться описанием собственной разработки, которая длится уже два с половиной года, параллельно основной работе.
В 2007 году я устроился на работу программистом в небольшую фирму. В должность инженера-программиста на сопровождении одной госпрограммы. Программа была написана на Delphi с использованием базы MSSQL 2005. Ни делфи ни SQL я не знал, предпочитая C++ всем прочим языкам, пришлось осваивать на месте.
Первые месяцы работы были посвящены изучению базовых знаний, прохождениям тестов на sql-ex.ru, и работой. Основной задачей был разбор SQL скриптов доставшихся в наследство от прежних поколений разработчиков, и написание новых. Работать с базами приходилось постоянно и постепенно на смену интересу в изучении нового пришло понимание что надо что-то с этим делать.
В первую очередь была написана небольшая программка на делфи отображающая данные по базе(таблицы, столбцы, хранимки), позволявшая выполнять простые запросы в ней, и отображавшая результат. Затем добавлся поиск по всей базе данных. А затем меня перевели на другие проекты и показали C#.
Так как программка на делфи начала пользоваться популярностью у других разработчиков, принял решение переписать ее заново используя студию.
Весь код по работе с базой на тот момент занимал строк двести и отвечал только за поддержку подключения к базе и выполнение запросов.
Надо сказать что на тот момент я имел смутное представление про ООП и его принципы, вся работа с базой была вынесена в один класс. Все его возможности по генерации скриптов заключались в SELECT * FROM выбранная_таблица, и приписывании WHERE с несколькими простыми условиями. Т.е. она реализовала все необходимое по работе на тот момент.
В январе 2008 года мне дали первый проект на собственную разработку, проект заключался в создании dll'ки на шарпе, которая позволяла бы простым пользователям генерировать SQL запросы неограниченной сложности, и выполняла бы их отображая результат. Проект был написан за 4 месяца, и позволил переосмыслить множество вещей относительно авотматизации программерского труда. Собственно он и послужил толчком к продолжению работы над собственной прослойкой.
И да, к тому моменту я знал про NHibernate и ему подобные проекты, и даже немного использовал. Но наличие свободного времени, и желание иметь полный контроль над собственными разработками заставляли делать свое.
Все наработки были отвергнуты как несостоявшиеся. Было произведено разделение задач между классами, доработка способов подключения. Контроль над исключениями и много другое.
На сегодня прослойка имеет представление в виде dll'ки, и умеет делать множество полезных вещей, постоянно работая с базами данным, я уже давно не писал SQL запросы вручную. Вот основной и краткий перечень возможностей:
В последней версии добавлена возможность одновременного подключения к нескольким базам. Впрочем проектов использующих несколько баз одновременно у меня пока нет, поэтому оптимальным решением мне кажется разделение проектора на три части: полнофункциональный(несколько баз), полнофункциональный(одна база) и простой, в котором все редкоиспользуемые навороты будут отключены.
Минусы которые вижу я:
Если заинтересует:
ifolder.ru/17678800
В архиве dll'ка, небольшой демо-проект, и совсем немного документации по началу работы. Если интересен код, рефлектор все покажет.
Критика в принципе приветствуется, если конструктивная. И хочу заметить, проект делается только под свои нужды.
Исходники (версия последняя, непротестированная, нет времения на доработку в текущий период):
ifolder.ru/17679675
P.S. По сути данный ОРП, просто сборник накопленных знаний за период работы с базами, оформленный в рабочий инструмент, причем часть из этих знаний включена просто чтобы не забыть, и не несет особо полезной функциональной нагрузки.
В 2007 году я устроился на работу программистом в небольшую фирму. В должность инженера-программиста на сопровождении одной госпрограммы. Программа была написана на Delphi с использованием базы MSSQL 2005. Ни делфи ни SQL я не знал, предпочитая C++ всем прочим языкам, пришлось осваивать на месте.
Первые месяцы работы были посвящены изучению базовых знаний, прохождениям тестов на sql-ex.ru, и работой. Основной задачей был разбор SQL скриптов доставшихся в наследство от прежних поколений разработчиков, и написание новых. Работать с базами приходилось постоянно и постепенно на смену интересу в изучении нового пришло понимание что надо что-то с этим делать.
В первую очередь была написана небольшая программка на делфи отображающая данные по базе(таблицы, столбцы, хранимки), позволявшая выполнять простые запросы в ней, и отображавшая результат. Затем добавлся поиск по всей базе данных. А затем меня перевели на другие проекты и показали C#.
Так как программка на делфи начала пользоваться популярностью у других разработчиков, принял решение переписать ее заново используя студию.
Весь код по работе с базой на тот момент занимал строк двести и отвечал только за поддержку подключения к базе и выполнение запросов.
Надо сказать что на тот момент я имел смутное представление про ООП и его принципы, вся работа с базой была вынесена в один класс. Все его возможности по генерации скриптов заключались в SELECT * FROM выбранная_таблица, и приписывании WHERE с несколькими простыми условиями. Т.е. она реализовала все необходимое по работе на тот момент.
В январе 2008 года мне дали первый проект на собственную разработку, проект заключался в создании dll'ки на шарпе, которая позволяла бы простым пользователям генерировать SQL запросы неограниченной сложности, и выполняла бы их отображая результат. Проект был написан за 4 месяца, и позволил переосмыслить множество вещей относительно авотматизации программерского труда. Собственно он и послужил толчком к продолжению работы над собственной прослойкой.
И да, к тому моменту я знал про NHibernate и ему подобные проекты, и даже немного использовал. Но наличие свободного времени, и желание иметь полный контроль над собственными разработками заставляли делать свое.
Все наработки были отвергнуты как несостоявшиеся. Было произведено разделение задач между классами, доработка способов подключения. Контроль над исключениями и много другое.
На сегодня прослойка имеет представление в виде dll'ки, и умеет делать множество полезных вещей, постоянно работая с базами данным, я уже давно не писал SQL запросы вручную. Вот основной и краткий перечень возможностей:
- Автогенерация кода, наиболее важное достижение на мой взгляд. Я просто указываю нужную мне базу и сразу получаю готовый код на C# полностью отражающий структуру таблиц, и позволяющий мне работать с базой как с набором класов и объектов
- Генерация SQL запросов. Прослойка позволяет создавать SQL запросы почти любой сложности. Также есть возможность создания именованных фильтров с их последующим применением. На сегодня не хватает возможности построения условий типа «Таблица.поле Операция Таблица.поле», и join подключений. В планах доработка.
- Асинхронные запросы. Можно создать объект класса асинхронного запроса, передать ему запрос, функцию которую необходимо выполнить перед запросом, и функцию которая выполнится после запроса, и в которую будет передан его результат. Затем закинуть его в очередь и он будет выполнен в фоновом потоке не блокируя основной процесс.
- Начав применять прослойку в web-разработке столкнулся с проблемой одновременного доступа к рессурсам. Переработав получил вполне приемлимую поддержку одновременного доступа к приложению. Тест прогоняющий 100 потоков параллельно в каждом из которых вызывается 100 INSERT'ов через прослойку выполняется корректно и без потерь.
- Кэширование данных. Реализовано три вида кэша: простой, обновляемый по запросу, автообновляемый по таймеру.
- Создание бэкапа базы, и восстановление из него.
- Ведение журнала ошибок.
В последней версии добавлена возможность одновременного подключения к нескольким базам. Впрочем проектов использующих несколько баз одновременно у меня пока нет, поэтому оптимальным решением мне кажется разделение проектора на три части: полнофункциональный(несколько баз), полнофункциональный(одна база) и простой, в котором все редкоиспользуемые навороты будут отключены.
Минусы которые вижу я:
- Недоработка генерации сложных условий, главным препятствием сейчас является отсутствие идеи, как сделать наиболее удобным их задание программистом при использовании прослойки.
- При использовании прослойки в web servic'е возникла проблема сохранения файла журнала на диск. Сейчас ведется исправление и переработка ведения журнала в принципе.
- Отсутствие документации. На хватает времени.
Если заинтересует:
ifolder.ru/17678800
В архиве dll'ка, небольшой демо-проект, и совсем немного документации по началу работы. Если интересен код, рефлектор все покажет.
Критика в принципе приветствуется, если конструктивная. И хочу заметить, проект делается только под свои нужды.
Исходники (версия последняя, непротестированная, нет времения на доработку в текущий период):
ifolder.ru/17679675
P.S. По сути данный ОРП, просто сборник накопленных знаний за период работы с базами, оформленный в рабочий инструмент, причем часть из этих знаний включена просто чтобы не забыть, и не несет особо полезной функциональной нагрузки.



комментарии (27)