Я тут чуть-чуть програмизмом занимаюсь, пишу сабж под FB для Delphi. Соотв. спрашиваю — кому-нить кроме меня нужно? Если нужно то можно обсудить особенности реализации
Пока надумал вот что — в связи с наличием огромного кол-ва библиотек работы с FB/IB не зашиваться на конкртную но требовать у пользователя реализации 2-х примитивных интерфейсов для работы с данными (это можно запросто сделать слегка обернув выбранную программистом библиотечку).
Здравствуйте, dimzon, Вы писали:
D>Я тут чуть-чуть програмизмом занимаюсь, пишу сабж под FB для Delphi. Соотв. спрашиваю — кому-нить кроме меня нужно? Если нужно то можно обсудить особенности реализации
D>Пока надумал вот что — в связи с наличием огромного кол-ва библиотек работы с FB/IB не зашиваться на конкртную но требовать у пользователя реализации 2-х примитивных интерфейсов для работы с данными (это можно запросто сделать слегка обернув выбранную программистом библиотечку).
Если под R/O mapping-ом ты понимаешь O-R mapping, то рекомендую тебе не заморачиваться: Во-первых, тема достаточно сложная и малоподъемная для одного человека (особенно занимающегося программизмом чуть-чуть). Во-вторых, есть уже достаточное количество работающих маперов, не привязывающихся к конкретному провайдеру.
L>Если под R/O mapping-ом ты понимаешь O-R mapping, то рекомендую тебе не заморачиваться: Во-первых, тема достаточно сложная и малоподъемная для одного человека (особенно занимающегося программизмом чуть-чуть). Во-вторых, есть уже достаточное количество работающих маперов, не привязывающихся к конкретному провайдеру.
Во первых несложная (для меня) ибо уже есть опыт (работающий мапер) на VB под MSSQL и Oracle и все алгоритмы я ужо знаю. Во вторых под "программизмом чуть-чуть" я имел ввиду небольшую библиотечку заточенную под FB и под Delphi чтобы можно было на коленке клепать desktop-приложения с минимальный деплойментом (например используя FB Embeded). При этом, замечу, я пытаюсь сделать библиотечку максимально универсальной и гибкой, пригодной для многозвенок
Единственное что меня собственно несколько заботит это незнание SQL диалекта FB но это несерьёзно
Здравствуйте, dimzon, Вы писали:
D>Во первых несложная (для меня) ибо уже есть опыт (работающий мапер) на VB под MSSQL и Oracle и все алгоритмы я ужо знаю. Во вторых под "программизмом чуть-чуть" я имел ввиду небольшую библиотечку заточенную под FB и под Delphi чтобы можно было на коленке клепать desktop-приложения с минимальный деплойментом (например используя FB Embeded). При этом, замечу, я пытаюсь сделать библиотечку максимально универсальной и гибкой, пригодной для многозвенок
D>Единственное что меня собственно несколько заботит это незнание SQL диалекта FB но это несерьёзно
Это ты думаешь, что у тебя есть опыт написания O-R маперов.
Посмототри проекты этих маперов из числа open source. И оцени после этого, сколько тебе времени и сил понадобится для того, чтобы полноценно повторить это на Дельфе. Уверен, что после того, как подробнее ознакомишься с этой темой, желание писать очередной свой мапер у тебя отпадет.
Здравствуйте, Lloyd, Вы писали:
L>Это ты думаешь, что у тебя есть опыт написания O-R маперов. L>Посмототри проекты этих маперов из числа open source. И оцени после этого, сколько тебе времени и сил понадобится для того, чтобы полноценно повторить это на Дельфе. Уверен, что после того, как подробнее ознакомишься с этой темой, желание писать очередной свой мапер у тебя отпадет.
Я вопрос задавал по предложениям/идеям. А про свои желания и возможности я сам прекрасно знаю. Сударь, со всей ответственностью заявляю что опыт есть, алгоритмы есть, работающая версия на которой крутится куча(!) коммерческих проектов есть. За 2-4 месяца неспешного кодирования (по желанию 1-2 часа в день через день) всё это преспокойно ляжет(читай будет портировано) в Delphi для FB. Будет 3 интерфейса 2 из которых необходимо будет реализовать самому (для взаимодействия мапера с БД), третий — интерфейс самого мапера. В базу будут укладываться сколь угодно сложные(практически) структуры данных (коллекции взаимосвязанных объектов) с минимальным overhead-ом. Исходный мапер является COM-компонентом на VB работающим с БД (MSSQL и Oracle) через ADO и для Desktop приложений не шибко подходит по ряду причин посему я и затеял всё это дело. Хочу вот поделится с людьми а они меня отговаривают, забавно
Здравствуйте, dimzon, Вы писали:
D>Я вопрос задавал по предложениям/идеям. А про свои желания и возможности я сам прекрасно знаю. Сударь, со всей ответственностью заявляю что опыт есть, алгоритмы есть, работающая версия на которой крутится куча(!) коммерческих проектов есть. За 2-4 месяца неспешного кодирования (по желанию 1-2 часа в день через день) всё это преспокойно ляжет(читай будет портировано) в Delphi для FB. Будет 3 интерфейса 2 из которых необходимо будет реализовать самому (для взаимодействия мапера с БД), третий — интерфейс самого мапера. В базу будут укладываться сколь угодно сложные(практически) структуры данных (коллекции взаимосвязанных объектов) с минимальным overhead-ом. Исходный мапер является COM-компонентом на VB работающим с БД (MSSQL и Oracle) через ADO и для Desktop приложений не шибко подходит по ряду причин посему я и затеял всё это дело. Хочу вот поделится с людьми а они меня отговаривают, забавно
Сударь, ни в коем случае не хотел умалить ваши достоинства/таланты. Но все-таки ради интереса посмотрите Hibernate. Дистрибутив в районе двух десятков метров и документация на несколько сотен страниц дают основания предполагать, что все-таки нормальный мапер неспешно за пару месяцев на коленке не пишется.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, dimzon, Вы писали:
L>Сударь, ни в коем случае не хотел умалить ваши достоинства/таланты. Но все-таки ради интереса посмотрите Hibernate. Дистрибутив в районе двух десятков метров и документация на несколько сотен страниц дают основания предполагать, что все-таки нормальный мапер неспешно за пару месяцев на коленке не пишется.
Сударь, это говорит только о том что мой мапер будет "ненормальный" Всё гениальное просто
Ну а если по существу — вот отличительные особенности моего мапера:
— использование XML вместо классов
Действительно я не планирую делать O-R мапер в полном объёме. Т.е. мапер не будет сохранять/загружать дельфовые классы. Вместо этого мапер будет оперировать XML (Объект это XMLElement, дочерние элементы XMLElement-а это свойства объекта...) Это съэкономит мне кучу времени на пляске вокруг RTTI
Здравствуйте, dimzon, Вы писали:
D>Сударь, это говорит только о том что мой мапер будет "ненормальный" Всё гениальное просто D>Ну а если по существу — вот отличительные особенности моего мапера: D>- использование XML вместо классов D> Действительно я не планирую делать O-R мапер в полном объёме. Т.е. мапер не будет сохранять/загружать дельфовые классы. Вместо этого мапер будет оперировать XML (Объект это XMLElement, дочерние элементы XMLElement-а это свойства объекта...) Это съэкономит мне кучу времени на пляске вокруг RTTI
Здравствуйте, Lloyd, Вы писали:
L>Ну это уже не O-R, а X-R мапер.
Пусть так (мне даже понравилось).
Опять же при желании никто не мешает позже докрутить O-X мапер
Ну ладно, наверно хватит флеймить, есть предложения/пожелания/советы по существу?
Здравствуйте, dimzon, Вы писали:
D>Пусть так (мне даже понравилось). D>Опять же при желании никто не мешает позже докрутить O-X мапер
D>Ну ладно, наверно хватит флеймить, есть предложения/пожелания/советы по существу?
Угу. Есть. Посмотри Хибернэйт. И забудь после этого свою затею писать мапер.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, dimzon, Вы писали:
D>>Пусть так (мне даже понравилось). D>>Опять же при желании никто не мешает позже докрутить O-X мапер
D>>Ну ладно, наверно хватит флеймить, есть предложения/пожелания/советы по существу?
L>Угу. Есть. Посмотри Хибернэйт. И забудь после этого свою затею писать мапер.
Сцылку дай
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, dimzon, Вы писали:
D>>Сцылку дай
L>здесь
Глянул! Не, такое я ТОЧНО делать не буду. Нафиг! А вот простенькую библиотечку забацаю — самое то будет. А этот самый хибернейт черезчур уж наворочен, мне например такой функционал нафиг ненужен! Мне нужно чтобы при сохранении сложных структур UPDATE/INSERT-ы руками не конструировать — создал XML, скормил маперу — он фсё но табличкам аккуратно разложил. Мапер это вообще интерфейс с 10-ю методами Причём заметь — за аккуратность и грамотность сохранения отвечаю на 100%
И опять же — хибернейт он для Явы а я про Дельфи говорю
Здравствуйте, dimzon, Вы писали:
D>Глянул! Не, такое я ТОЧНО делать не буду. Нафиг! А вот простенькую библиотечку забацаю — самое то будет. А этот самый хибернейт черезчур уж наворочен, мне например такой функционал нафиг ненужен! Мне нужно чтобы при сохранении сложных структур UPDATE/INSERT-ы руками не конструировать — создал XML, скормил маперу — он фсё но табличкам аккуратно разложил. Мапер это вообще интерфейс с 10-ю методами Причём заметь — за аккуратность и грамотность сохранения отвечаю на 100%
Не зарекайся. Грамотность сохранения подразумевает, например, что в апдейте участвуют только измененные поля.
D>И опять же — хибернейт он для Явы а я про Дельфи говорю
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, dimzon, Вы писали:
L>Не зарекайся. Грамотность сохранения подразумевает, например, что в апдейте участвуют только измененные поля.
Не зарекаюсь — ЗНАЮ Я же говорю — есть уже работающий код просто он в виде COM-а и на VB и НЕ ДЛЯ FB Там много тонкостей например в т.ч. и с уникальными индексами и с ссылочной целостностью, я обо всём в курсе (этот самый компонент на VB ужо за 3 года обкатали)
D>>И опять же — хибернейт он для Явы а я про Дельфи говорю L>А выбирать из базы ты каким образом будешь?
Если данные ТОЛЬКО на чтение то лучше и быстрее обычного SELECT-а исчо никто не придумал.
Если для модификации — будет метод который по имени таблицы и первичному ключу возвращает заполненный XML.
Здравствуйте, dimzon, Вы писали:
D>Глянул! Не, такое я ТОЧНО делать не буду. Нафиг! А вот простенькую библиотечку забацаю — самое то будет.
удачи... собственно, что тебе мешает? Просто есть большие подозрения, что твоя простенькая библиотечка может и будет эффективно работать с базой в которой 2-3 таблицы, по 10 записей в каждой, но вот на больших объемах сомнительно.
D> А этот самый хибернейт черезчур уж наворочен, мне например такой функционал нафиг ненужен! Мне нужно чтобы при сохранении сложных структур UPDATE/INSERT-ы руками не конструировать — создал XML, скормил маперу — он фсё но табличкам аккуратно разложил.
Hibernate именно так и работает — создаешь класс, который будешь мапировать, создаешь XML-файл, в котором указываешь какие поля и по каким правилам будешь мапить, а потом все обращение к базе идет ИМЕННО на уровне объектов, все операции типа SELECT/INSERT/UPDATE/DELETE библитека сама cделает.
D>Мапер это вообще интерфейс с 10-ю методами А перечислить их тебя не затруднит?
D>Причём заметь — за аккуратность и грамотность сохранения отвечаю на 100%
Тесты, таварисч, хотелось бы видеть тесты.
D>И опять же — хибернейт он для Явы а я про Дельфи говорю
есть порт для .NET, правда еще в стадии alfa-версии
Здравствуйте, Supervisor, Вы писали:
S>Здравствуйте, dimzon, Вы писали:
S>удачи... собственно, что тебе мешает? Просто есть большие подозрения, что твоя простенькая библиотечка может и будет эффективно работать с базой в которой 2-3 таблицы, по 10 записей в каждой, но вот на больших объемах сомнительно.
Хм. Я же говорю есть работающий компонент на котором живут большие проекты (последний проект это порядка 40 таблиц в некоторых ~поллимона записей)
S>Hibernate именно так и работает — создаешь класс, который будешь мапировать, создаешь XML-файл, в котором указываешь какие поля и по каким правилам будешь мапить, а потом все обращение к базе идет ИМЕННО на уровне объектов, все операции типа SELECT/INSERT/UPDATE/DELETE библитека сама cделает.
Не совсем. Hibernate работает с Java-клсаами, у меня это не классы а структуры XML
D>>Мапер это вообще интерфейс с 10-ю методами S> А перечислить их тебя не затруднит? Примерно так:
type// IFBAdapterDataReader & IFBAdapter - обёртки вокруг любой библиотеки работы с Firebird
IFBAdapterDataReader= interface
function MoveNext():boolean;
function FieldValueAsVariant(nFieldIndex):Variant
end;
IFBAdapter=interface
function ExecuteSqlStatement(sSql: string ):integer;
function ExecuteSqlAndReturnDataReader(sSql: string ):IFBAdapterDataReader;
end;
IXRFBMapper = interface
function NewObject(sObjectType:string):IXMLDOMElement;
function ReadObject(oFBAdapter: IFBAdapter; sObjectType:string; sObjectKey:string):IXMLDOMElement;
function WriteObject(oFBAdapter: IFBAdapter; oObject: IXMLDOMElement; bCheckVersions: boolean ):boolean;
function BatchWrite(oFBAdapter: IFBAdapter; oContainer: IXMLDOMElement; bCheckVersions: boolean ):boolean;
function ReadObjectProperty(oFBAdapter: IFBAdapter; oObjectProperty: IXMLDOMElement):IXMLDOMElement;
function ReadObjectPropertyByObjectKey(oFBAdapter: IFBAdapter; sObjectType:string; sObjectKey:string; sPropertyName: string):IXMLDOMElement;
function DeleteObject(oFBAdapter: IFBAdapter; oObject: IXMLDOMElement):boolean;
function DeleteObjectByObjectKey(oFBAdapter: IFBAdapter; sObjectType:string; sObjectKey:string):boolean;
end;
Здравствуйте, dik76, Вы писали:
D>Я в данном вопросе профан. D>Раскажите, плиз, о методологии работы мепера или может дадите ссылочку где можно почитать об этом.