Требования к системе управления данными проекта
Как говорится если ты не можешь что-то объяснить пятилетнему ребенку, значит ты сам не понимаешь о чем говоришь. Поэтому давайте я попробую как можно более доходчиво рассказать о том, что творится у меня в голове. Хотя нет… О том, что в голове творится лучше помолчать, а вот о системе управления базой данных Снапа, пожалуй, расскажу. Точнее пока поговорим не о самой системе, а о требованиях к ней.
Постом ранее я уже обмолвился, что на данный момент все мои мысли заняты разработкой небольшой библиотеки, которая бы позволила удобным для меня образом управлять данными моих проектов. По сути, это ни что иное как небольшая надстройка над стандартными классами CodeIgniter, отвечающих за обращение к БД.
Я не первый и уж тем более не последний, кто пытается найти для себя наиболее приемлимую и эффективную схему работы с данными проекта. Так например, уже давно существует такая идея представления информации, которая получила название - Object-relational mapping, суть в том, что данные хранящиеся в БД могут быть автоматически загружены в объекты программы (речь идет об объектно ориентированном программировании естественно) минуя какие-либо прямые SQL запросы.
Вообще, мне кажется, что позицию всех программистов при работе с различными библиотеками, коротко можно сформулировать так: “я не хочу знать как ты это сделаешь, просто сделай это”. Скрыв от разработчика информацию о сложности связанной с хранением и получением данных, мы как бы развязываем ему руки для творчества. И в этом смысле, я тоже не хочу знать о низкоуровневой реализации библиотек которые использую, мне достаточно иметь удобный интерфейс и прозрачную архитектуру в своем распоряжении. Именно к реализации этой идеи я стремлюсь сейчас.
Но я несколько отвлекся. Вернемся к тому, какие потребности возникают лично у меня при создании интернет проектов. В первую очередь, мне нужно чтобы мой код можно было использовать повторно столько раз сколько потребуется, при этом не внося в него никаких изменений, а просто комбинируя его в разных последовательностях. Затем, мне важно скрыть особенности работы СУБД, вместо этого хочется иметь некоторый интерфейс при помощи которого я смог бы работать с данными, которые мне необходимы в данный момент. Ну и наконец, мне хочется, чтобы результат был предоставлен в удобном для меня виде, на данный момент мне наиболее удобно работать с массивом данных, а не с объектами. Это требование и отличает мою идею от обычной ORM системы.
Что касается повторного использования кода, то для себя я уже давно вывел следующее правило - повторно можно использовать только код решающий самые простые задачи. Поэтому, я попытался разбить основную проблему - управление данными в БД, на более мелкие подзадачи, которые, в совокупности позволяют строить сколько угодно сложные системы. Первое, что пришло на ум - это создать класс-родитель, который содержит интерфейс, позволяющий управлять одной простой таблицей. Простой будем считать такую таблицу в которой присутствует только два столбца, один из которых содержит уникальный идентификатор, а другой непосредственно данные.
Естественно, на практике таблицы из двух столбцов встречаются редко, поэтому необходимо предусмотреть возможность объединять несколько простых таблиц в одну более сложную. Причем, на уровне кода, для каждой простой таблицы создается свой класс, а на уровне базы данных, это может быть одна таблица.
И еще одно требование, на которое я не обратил внимание ранее, заключается в том, что при разработке проектов мне удобнее оперировать с сущностями реального мира, такими, например, как почтовые и электронные адреса, фамилии, имена, интересы и т.д. Поэтому необходимо решить каким образом эти сущности будут отражены в коде.
Как видишь, требований оказалось не так много, это связанно с тем, что большая их часть живет в мое голове в форме ощущений и желаний, которые трудно выразить словами, но, так или иначе, у меня в голове уже начинает складываться образ будущей системы и в последующих постах я более подробно расскажу о реализации приведенных требований. Возможно тогда список требований расширится и станет более понятно о чем я говорю сейчас.
dkrnl
Гость
Женя я больше сколонен считать что это утопия.
Вся прелесть orm кончается на сложном join, адекватно делать group by вообще мало кто умеет делать (среди orm-библиотек). А если начинаестя борьба за производительность - опускаются руки и здравству старый, добрый, гибкий - sql. (:
Хотя я сам мечтаю о серебренной пуле (:
PS: Все канешно имхо.
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
Дима, ты абсолютно прав. Но то, что я хочу сделать это не совсем orm, хотя в чем-то есть похожесть.
dkrnl
Гость
ты про datamapper/activerecord? да безусловно это удобно, только для insert,update,delete,select.
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
Дим, это не датамэпинг это в чистом виде. В том смысле, что я не ставлю перед собой задачу отобразить данные из базы на свойства класса. Я хочу, создать набор элементарных классов, комбинируя которые можно получать более сложные вещи…. Короче надо писать еще один пост на эту тему, демонстрировать на примерах, в двух словах не опишешь.
Владимир Лучанинов
Гость
Жень, ты на CakePHP смотрел? Там, по-моему, то что ты хочешь, очень классно сделано в Model.
Вот расписано для версии 1.1
http://manual.cakephp.org/chapter/models
В 1.2 ещё круче - там появились With (как в Ruby).
Evgeny Sergeev
Веб-разработчик, автор блога codeart.ru
Честно говоря на CakePHP не смотрел, но теперь обязательно гляну! Спасибо за подсказку.
Snowcore
Гость
А в Code Igniter все еще проще.