Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Вниз

Что использовать вместо RECORD?   Найти похожие ветки 

 
Reindeer Moss Eater ©   (2008-03-25 08:55) [40]

Это невозможно по определению. См. [18]. Все то же самое, что и с рекордами - там могут быть только ShortString. Иначе типизированный файл не катит.

А! Понял. то есть все строковый поля в типе будут короткими строками.

Итого:
что мы дополнительно получили от переписывния кода? :
-ничего, кроме возможности не делать Dispose.


 
Семеныч   (2008-03-25 10:46) [41]

> Reindeer Moss Eater ©   (25.03.08 08:55) [40]

> все строковый поля в типе будут короткими строками.

Не будут, а есть. Они уже коротие, раз юзается типизированный файл.

> ничего, кроме возможности не делать Dispose.

Не только. Еще (не написав ни одной строчки!), получили возможность использовать готовый список со всеми его методами - добавить, вставить, удалить, найти, переместить, сортировать и т.п. В случае record"ов пришлось бы брать TList и допиливать все эти методы вручную, а так - все готовое. Для законченности осталось ввести в список 2 очень простых метода: SaveToFile и LoadFromFile (причем код в них практически такой же, как и при работе с reacord"ами - то есть, лишнего кодирования опять нет).

> что мы дополнительно получили от переписывния кода?

Во-первых, переписывание минимально, а объем кодирования даже меньше, чем при использовании record"ов (за счет готового списка). Во-вторых, раз автор хочет удобства, то избежать переписывания совсем, естественно, не получится (и вот тут оно как раз минимальное). В третьих, дополнительно мы получили то самое удобство работы со списком, которого и хотелось.


 
Семеныч   (2008-03-25 10:58) [42]

> Reindeer Moss Eater ©   (25.03.08 08:52) [39]

> весь фукнкционал уже реализован добрым дядей в виде savetofile.

В случае record"ов или объектов весь функционал тоже уже реализован в виде Write или WriteBlock.

Осталось только написать заголовок цикла. И уверяю Вас, что это будет на несколько порядков проще, быстрее и надежнее, чем переписывать код под xml.

Кстати, а что мы поимеем после капитальной работы по переписыванию кода под xml по сравнению со списком record"ов или объектов?

а). Объем переписывания - гораздо больше (соответственно, вероятность налепить ошибок и длительность отладки тоже будут гораздо больше).
б). Функциональные преимущества - никаких.
в). Функциональные недостатки - тормоза.


 
Ega23 ©   (2008-03-25 11:06) [43]


> Кстати, а что мы поимеем после капитальной работы по переписыванию
> кода под xml по сравнению со списком record"ов или объектов?
>  


Но преимущества-таки тоже есть:
1. читабельность (возможность подправить руками)
2. Уже упомянутый XPath


 
Reindeer Moss Eater ©   (2008-03-25 11:14) [44]

Кроме всего прочего, с объектами вы будете вынуждены перегружать их ненужной RTTI (паблишед свойства) либо все же придется изобретать свою сериализацию паблик свойств.

ну и все же снова повторюсь о версионности формата.
если программируешь для младшей сетстры, это конечно не актуально, а если есть удаленные подразделения, то оченно даже актуально.


 
DVM ©   (2008-03-25 11:26) [45]

Все таки XML он предназначен больше для обмена данными, нежели их хранения. Хранение обладает кошмарной избыточностью - на 1 байт полезных данных 9 и более байт мусора всякого. Использовать XML в качестве базы данных нерационально.


 
Семеныч   (2008-03-25 11:28) [46]

> Reindeer Moss Eater ©   (25.03.08 11:14) [44]

> Кроме всего прочего, с объектами вы будете вынуждены перегружать их
> ненужной RTTI (паблишед свойства) либо все же придется изобретать
> свою сериализацию паблик свойств.

Нет, Вы все-таки не понимаете. Не нужно изобретать никакой своей сериализации. Не нужна никакая RTTI вообще. Кто мешает писать объект, используя BlockWrite?

Третий раз пишу (вдумайтесь уже, наконец-то) - раз человек сейчас УЖЕ использует типизированный файл рекордов, значит эти рекорды ЗАВЕДОМО не содержат никаких указателей. Тогда, переделав рекорд в объект, мы и этот объект можем писать ТАК ЖЕ, как до этого писали record (BlockWrite + InstanceSize).

Вся разница состоит в одной простенькой дополнительной строчке: после чтения объекта из файла нужно прописать первые 4 байта в нем ссылкой на заведомо известный класс:
PPointer(Obj)^ := Pointer(TObjClass);

И все. И не нужны здесь никакие RTTI и никакие самопальные сериализации, понимаете? Весь фокус в том, что данные не содержат указателей.


 
Reindeer Moss Eater ©   (2008-03-25 11:30) [47]

а не слишком дорогая цена за нехотение вызывать диспоуз?


 
Семеныч   (2008-03-25 11:32) [48]

> нужно прописать первые 4 байта

Кстати, а можно и не прописывать - если писать в файл не весь объект, а начиная со смещения +4 (и соответственно читать).


 
Семеныч   (2008-03-25 11:37) [49]

> Reindeer Moss Eater ©   (25.03.08 11:30) [47]

> а не слишком дорогая цена

ГДЕ Вы увидели дорогую цену? Это как раз при переписке под XML цена будет не просто дорогая, а супердорогая. А переписка с рекордов (которые УЖЕ юзаются) на объекты - это как раз переделки самые минимальные из всех возможных. ГДЕ Вы увидели дорогую цену?

> за нехотение вызывать диспоуз?

Блин. Извините, я для кого пишу? Вы [41] читали? Вдумчиво?


 
Reindeer Moss Eater ©   (2008-03-25 11:40) [50]

В общем скажу так. Я тоже раньше перся от подобных вещей, а так же от TStream + TReader + TWriter пока не распробовал xml и не проникся. После чего благополучно забыл навсегда все эти танцы, как страшный сон.


 
Семеныч   (2008-03-25 11:47) [51]

> Reindeer Moss Eater ©   (25.03.08 11:40) [50]

> TStream + TReader + TWriter

Блин. Извините, я для кого пишу? Вы [46] читали? Вдумчиво?

> пока не распробовал xml и не проникся.
> После чего благополучно забыл навсегда все эти танцы

Это уже религия. А плясать надо от задачи, а не от религии. Стрелять по воробъям гораздо проще и дешевле из рогатки, а не ракетой "земля -воздух".


 
Reindeer Moss Eater ©   (2008-03-25 11:50) [52]

Да понял я все. Не переживайте так.


 
Reindeer Moss Eater ©   (2008-03-25 11:52) [53]

Стрелять по воробъям гораздо проще и дешевле из рогатки, а не ракетой "земля -воздух".

Я стреляю и по воробьям и по мамонтам одной удобной многофункциональной и не такой уж тяжелой рогаткой.


 
Семеныч   (2008-03-25 11:56) [54]

> Reindeer Moss Eater ©   (25.03.08 11:52) [53]

А не слишком дорогая цена?
© Reindeer Moss Eater

:o)


 
Reindeer Moss Eater ©   (2008-03-25 11:57) [55]

ГДЕ Вы увидели дорогую цену?

Вы переписываете все и ничего кроме освобождения памяти автоматом не получаете. Поиск будет представлять все ту же итерацию по списку.
Если поменяется структура объекта вы перепишете алгоритм поиска.
А я перепишу всего лишь литерал для xpath.
Я тоже переписываю все, но получаю кучу преимуществ.

Вот это я и называю ценой.


 
Reindeer Moss Eater ©   (2008-03-25 12:03) [56]

Вот еще из той же оперы:

xdoc.Load("c:\data.xml");
xdoc.Load("http://server.domain.com/data.xml");
xdoc.Load("res://c:\mydll.dll/myxmlresource");

Удобно? Кто скажет нет, пусть бросит в меня камень.
:)


 
Семеныч   (2008-03-25 12:38) [57]

> Reindeer Moss Eater ©   (25.03.08 11:57) [55]

> ГДЕ Вы увидели дорогую цену?

В стрельбе ракетой по воробьям - раз. В необходимости переписывать весь код (притом, принципиально) - два.

> Вы переписываете все

Как раз наоборот. Это Вы переписываете все (притом, принципиально). А я не переписываю почти ничего. Объявление рекорда меняется на объявление класса - раз (одна строчка - 1 минута). Процедуры типа "добавить, вставить, удалить, переместить, сортировать и т.п" (которые раньше использовались для рекордов) выбрасываются совсем (потому что они уже есть в готовом списке) - два (еще пара минут). Делается потомок списка и в него добавляются методы записи и чтения (по обозначенной выше схеме) - три (еще минут 10). Итого - минут 15 на всю переделку. И отладки потребуют только 2 метода (запись и чтение), а поскольку они тоже простейшие, то еще минут 15 на отладку. Всего - полчаса.

А вот Вы переписываете действительно все, притом принципиально. А потом все это еще и отлаживаете.

> и ничего кроме освобождения памяти автоматом не получаете.

Блин. Ну когда Вы уже читать начнете? См. [41]: "Еще (не написав ни одной строчки!), получили возможность использовать готовый список со всеми его методами... ".

> Поиск будет представлять все ту же итерацию по списку.

Как Вы считаете - а какой алгоритм используется в DOM при поиске по XPath?
:о)

> Если поменяется структура объекта вы перепишете алгоритм поиска.

Ни фига подобного. Поиск по значению поля объекта никак не зависит от его структуры, хоть сто раз ее меняйте. Так что никаких переписок вообще не потребуется.

> А я перепишу всего лишь литерал для xpath.

Вот это точно. При любом изменении структуры объекта Вы будете вынуждены в обязательном порядке и каждый раз переписывать XPath (с риском внести ошибку). "Всего лишь".

> Я тоже переписываю все

Это точно. Притом, с нуля и принципиально. Абсолютно новый код.

> но получаю кучу преимуществ.

В данной задаче - ни-ка-ких. Пресловутый XPath лишь вносит проблемы переписывания при изменении структуры объекта, но поиск не упрощает. Гораздо проще вызвать один раз написанный (и никогда не меняющийся) метод поиска по полю.


 
Семеныч   (2008-03-25 12:42) [58]

> Reindeer Moss Eater ©   (25.03.08 12:03) [56]

> Удобно?

Настолько же удобно, насколько продиктовано требованиями задачи. Если оно не нужно - то и нафиг сдалось. Потому что нет никакого смысла платить сложностью и тормозами за совершенно ненужные бантики.


 
Reindeer Moss Eater ©   (2008-03-25 12:46) [59]

Ой да ладно.
Мне по барабану какой алгоритм поиска использует оракл. И в этом кайф.
Я лишь пишу запрос.
То же самое происходит в случае XPath.
Переписывать в моем случае надо не больше чем в вашем случае.
То что используемый мной механизм является ракетой, не повышает стоимость её использования для меня.
Для меня все удешевляется и унифицируется.
Никаких проблем при изменении структуры xpath вообще не вносит.
Старый код читает старые данные и не портит новые.
Новый код читает старые данные и не портит старые.


 
Reindeer Moss Eater ©   (2008-03-25 12:48) [60]

Если оно не нужно - то и нафиг сдалось.

Все верно.
А если нужно, то у меня уже все есть, а вы прикручиваете новый код к своим классам.


 
Reindeer Moss Eater ©   (2008-03-25 12:51) [61]

что будет, если ваш код в котором появилась поддержка нового атрибута встретит старый файл данных?

и что будет если старый код встретит новый файл данных где в классе присутствуют поля, про которые старый код вообще ничего не знает?
как минимум данные не загрузятся.
как максимум - загрузятся и при сохранении затрут новые атрибуты.

Ага?


 
clickmaker ©   (2008-03-25 12:56) [62]


> [61] Reindeer Moss Eater ©   (25.03.08 12:51)

а ты думал, зря в апишных структурах столько Reserved1, Reserved2.. ? o)


 
Reindeer Moss Eater ©   (2008-03-25 13:06) [63]

а ты думал, зря в апишных структурах столько Reserved1, Reserved2.. ? o)

Ну тут вообще без проблем.
Побольше свойств - shortstring с именами reserved и золотой ключик у них в кармане;

:)


 
Семеныч   (2008-03-25 16:59) [64]

Большинство людей поступают так: когда надо подняться на второй этаж - идут пешком, когда на десятый - вызывают лифт, а когда на гору высотой 3 км - предпочитают вертолет.

Это - логика.

Но есть люди, которые предпочитает вертолет во всех случаях, говоря, что этот способ универсален. И не обращая внимания на стоимость полета на вертолете на второй этаж. А также на необходимость строительства на втором этаже вертолетной площадки.

Что ж, это их право. Но это - не логика. Это - религия. Вера.

Логика перед верой бессильна. Поэтому - let it be.


 
Reindeer Moss Eater ©   (2008-03-25 17:02) [65]

стоимость вертолета в моем случае - добавить в юзез
msxml2_tlb.pas


 
Семеныч   (2008-03-25 17:41) [66]

> Reindeer Moss Eater ©   (25.03.08 17:02) [65]

Да, конечно. А XPath написать в комментарии.
:o)


 
Reindeer Moss Eater ©   (2008-03-25 17:48) [67]

Самолет - хорошо.
Вертолет - хорошо.
А олени- лучше!

:)


 
MsGuns ©   (2008-03-25 21:05) [68]

Между тем единственное дельное замечание по теме [25] все дружно проигнорировали.

Кстати, xml в плане "скорострельности" и "экономичности" - полное дерьмо


 
Reindeer Moss Eater ©   (2008-03-25 21:51) [69]

шортстринги офигенно экономичны.


 
Reindeer Moss Eater ©   (2008-03-25 21:59) [70]

и куча экземпляров класса в обжектлисте это тоже образец экономичности.


 
MsGuns ©   (2008-03-25 22:06) [71]

>MsGuns ©   (25.03.08 21:05) [68]
>Между тем единственное дельное замечание по теме [25] все дружно проигнорировали.

Пардон, [15] конечно


 
Reindeer Moss Eater ©   (2008-03-25 22:17) [72]

Между тем единственное дельное замечание по теме [25] все дружно проигнорировали.

Кстати, xml в плане "скорострельности" и "экономичности" - полное дерьмо


Кстати, единственное дельное замечание само активно использует "полное дерьмо"


 
Семеныч   (2008-03-25 22:35) [73]

> Reindeer Moss Eater ©   (25.03.08 21:59) [70]

Согласен. Дерево элементов DOM, безусловно, намного экономичнее. А метровая DLL - так это и вовсе пустяк.

LOL


 
Reindeer Moss Eater ©   (2008-03-25 22:41) [74]

эта метровая длл по жизни в винде есть.
/* кому сегодня сдалась вообще эта пресловутая экономичность? кроме разумеется действительно важной экономии времени */

ps лол без причины признак ....


 
Reindeer Moss Eater ©   (2008-03-25 22:45) [75]

сначала ради сомнительных выгод извращаются над объектами, ограничивась полями из shortstring, потом загоняют всех их в обжект лист, после чего, поняв, что xml-то реально облегчает жизнь девелопера, тыкают в меня последней соломинкой "неэкономичности" DOM.
пипец просто.


 
Семеныч   (2008-03-25 22:53) [76]

> пипец просто.

Снова согласен. Снова LOL.


 
VirEx ©   (2008-03-27 18:16) [77]

sqlite



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.04.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.62 MB
Время: 0.046 c
2-1206700051
gefest80
2008-03-28 13:27
2008.04.20
позиция курсора в TEdit или TMaskEdit


2-1206708622
asdf2
2008-03-28 15:50
2008.04.20
DataSet


2-1206097183
dumka
2008-03-21 13:59
2008.04.20
Отчеты


15-1204620182
Washington
2008-03-04 11:43
2008.04.20
HASP HL


15-1204557221
Slider007
2008-03-03 18:13
2008.04.20
С днем рождения ! 3 марта 2008 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский