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

Вниз

Наследники TList   Найти похожие ветки 

 
DVM ©   (2008-09-25 21:19) [40]


> Ничего ты не понимаешь.

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


 
Ega23 ©   (2008-09-25 21:36) [41]

Ну человек - фанат хмл. Я вот Sepultura люблю, он - хмл.


 
guav ©   (2008-09-25 22:02) [42]

> Речь идет не о конкретной разработке, а вообще о подходах...

подходы бывают разные.
1. array of TRecord.
2. TList как есть. А лучше сделать классами и TObjectList, тоже как есть.
3. Написать генерилку и нагенерячить.
http://www.torry.ru/authorsmore.php?id=1994
4. Связный список. Кстати, в WinAPI есть lock-free реализация односвязного списка.
5. Частичная иммитация С++овской STL тоже возможна
http://sourceforge.net/projects/dclx
6. Convert absolutely everything to XML
http://www.bitschubser.com/HowToRTFM/Q209354%20-%20HOWTO.htm
...


 
Медвежонок Пятачок ©   (2008-09-25 22:05) [43]

Я действительно не понимаю зачем пихать всюду XML

Многие многого не понимают.
Я вот не понимаю проблем автора ветки.


 
Медвежонок Пятачок ©   (2008-09-25 22:08) [44]

Я действительно не понимаю зачем пихать всюду XML

А зачем всюду пихать циклы for/while и иф/елс?
Типа тоже вопрос.


 
DVM ©   (2008-09-25 22:11) [45]


> А зачем всюду пихать циклы for/while и иф/елс?

но ими же не пытаются заменить XML :)


 
guav ©   (2008-09-25 22:16) [46]

> [44] Медвежонок Пятачок ©   (25.09.08 22:08)

Зачем вообще циклы ? Надо что-то сделать с кучей рекордов ? Ну если входные данные в XML и выходные в XML, не круче ли будет написать XSL ?


 
Медвежонок Пятачок ©   (2008-09-25 22:26) [47]

> особенно бинарные данные там хорошо будут смотреться особенно
> в плане скорости добавления/удаления


Рассказываю про бинарные данные.
Есть у меня дистрибутив программы. Коробочная штука. После инсталла полностью готова к работе. Кроме одной вещи, которую в инсталл не засунешь. Это контейнеры приватных ключей и хранилище сертификатов.
Для каждого нового клиента генерируется свой комплект.
При создании учетки для нового клиента создается xml документ куда кроме прочих параметров, используемых при инициализации чистой бд добавляются те самые ключи и сертификаты в b64 виде в узлах cdata.

Объемы разумеется не гигабайтные, но никаих проблем со скоростью никто не имеет. Одни сплошные удобства. При запуске с параметрами все данные переезжают в бд, все файлы декодируются из xml и ложаться куда надо.


 
Ega23 ©   (2008-09-25 23:13) [48]


> Медвежонок Пятачок ©   (25.09.08 22:26) [47]


ну и че? Ну нормальное и вполне разумное применение xml.
А вот когда пишешь, ну не знаю, очередь какую-нибудь, причем не простую FIFO, а похитрее - что, тоже XML надо использовать?
Проблема его в том, что это, как ни крути  - суть строка. Да, можно дополнительно извернуться и написать такой парсер, который потом в нодах будет хранить именно те типы данных, которые требуются. Но в целом - строка, как ни крути. И ты, как человек весьма не плохо разбирающийся в БД, прекрасно знаешь, что такое "сравнение по строке" vs "сравнение по числу".

Всякой технологии должно быть своё место. Фомировать XML при передачи метаданных там, где он не нужен - не стоит. Там где он будет вполне уместен - почему бы и нет (с учетом того, что сейчас практически все СУБД такой тип данных имеют. Ну, не экзотические, во всяком случае).

Малой саперной лопаткой, к примеру, можно не только копать. Её можно вполне сносно в цель метать. Мы ей и консервы открывали, и дрова рубили и хлеб даже как-то резали. Но буть уверен, что если ьы в тот момент был топор - дрова рубили бы топором. :)


 
Медвежонок Пятачок ©   (2008-09-25 23:19) [49]

Ега, ты лучше автору расскажи как ему его листы с множественными типами рекордов пополиморфеестее обрабатывать и поинкапсулеестее проектировать.
Скоро полсотни постов, а у него все еще оргазм не наступил.

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


 
Ega23 ©   (2008-09-26 10:45) [50]


> Ега, ты лучше автору расскажи как ему его листы с множественными
> типами рекордов пополиморфеестее обрабатывать и поинкапсулеестее
> проектировать.


А никак. Если рекорд - то я вообще не вижу сильно большого смысла TList перекрывать. Ну разве Notify, чтобы удалялось по Clear.

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


 
Поросенок Винни-Пух ©   (2008-09-26 10:50) [51]

вот поэтому-то я как-то и решил, что ну его в баню.
заменил лист на ixmdonnodelist а рекорд на ixmldomnode

при этом структуры разные, а типов всего два на все про все.


 
Добежал   (2008-09-26 12:50) [52]

Поросенок Винни-Пух, а какие средства используешь для работы с XML? Что-то дельфовое или стороннее?
WinApi?


 
Ins ©   (2008-09-26 12:56) [53]

Если версия Delphi от 2005 до 2007, то можно использовать что-то подобное такому Code Template, облегчающему написание потомков от TList/TObjectList:

<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns="http://schemas.borland.com/Delphi/2005/codetemplates" version="1.0.0">
  <template name="SafeObjectList" invoke="manual">
     <description>
Safe type TObjectList
     </description>
     <author>
        Ins
     </author>
     <point name="listclass">
        <text>
TMyObjectList
        </text>
        <hint>
List class name
        </hint>
     </point>
     <point name="itemclass">
        <text>
TMyObject
        </text>
        <hint>
Item class name
        </hint>
     </point>
     <code language="Delphi" delimiter="|"><![CDATA[|*||listclass| = class(TObjectList)
|*|protected
|*||*|function GetItem(Index: Integer): |itemclass|;
|*||*|procedure SetItem(Index: Integer; const Value: |itemclass|);
|*|public
|*||*|function Add(AObject: |itemclass|): Integer;
|*||*|function Extract(Item: |itemclass|): |itemclass|;
|*||*|function Remove(AObject: |itemclass|): Integer;
|*||*|function IndexOf(AObject: |itemclass|): Integer;
|*||*|procedure Insert(Index: Integer; AObject: |itemclass|);
|*||*|function First: |itemclass|;
|*||*|function Last: |itemclass|;
|*||*|property Items[Index: Integer]: |itemclass| read GetItem write SetItem; default;
|*|end;

{ |listclass| }

function |listclass|.Add(AObject: |itemclass|): Integer;
begin
|*|Result := inherited Add(AObject);
end;

function |listclass|.Extract(Item: |itemclass|): |itemclass|;
begin
|*|Result := |itemclass|(inherited Extract(Item));
end;

function |listclass|.First: |itemclass|;
begin
|*|Result := |itemclass|(inherited First);
end;

function |listclass|.GetItem(Index: Integer): |itemclass|;
begin
|*|Result := |itemclass|(inherited Items[Index]);
end;

function |listclass|.IndexOf(AObject: |itemclass|): Integer;
begin
|*|Result := inherited IndexOf(AObject);
end;

procedure |listclass|.Insert(Index: Integer; AObject: |itemclass|);
begin
|*|inherited Insert(Index, AObject);
end;

function |listclass|.Last: |itemclass|;
begin
|*|Result := |itemclass|(inherited Last);
end;

function |listclass|.Remove(AObject: |itemclass|): Integer;
begin
|*|Result := inherited Remove(AObject);
end;

procedure |listclass|.SetItem(Index: Integer; const Value: |itemclass|);
begin
|*|inherited Items[Index] := Value;
end;]]>
     

  </template>
</codetemplate>


 
Поросенок Винни-Пух ©   (2008-09-26 12:59) [54]

project->import type library->microsoft xml,v4.0 /6.0 ->create unit


 
sniknik ©   (2008-09-26 14:14) [55]

крылья, ноги... хвост, вот что главное! © ящерица из мультфильма

> У меня зачастую хранятся именно структуры аля:
>  TClientInfo = record
>    Name:
>    Family:
>    Date
>    bla bla
>  end;


это естественным образом это ложится в рекордсет, либо таблицу, каждый рекорд ака запись в таблице, переменная - поле. автоматом получаем индексы, поиск, сортировки, скорость обработки данных (особенно если записей много). т.е. удобства работы с данными, до которого xml далеко (имхо, и не надо приводить примеры сложных но относительно маленьких структур, и др. где xml действительно к месту), а уж список с рекордами вообще можно не рассматривать, несравнимо.


 
sniknik ©   (2008-09-26 14:18) [56]

> А ведь таких списков может быть десятки, сотни... тысячи.
а это уже полноценная база данных, и немаленькая... раз счёт таблиц на тысячи идёт.


 
Поросенок Винни-Пух ©   (2008-09-26 14:18) [57]

индексы в списке рекордов?
автоматом поиск?
автоматом сортировка?

а! понял. речь шла про скл сервер. понял. заменить списки таблицами оракла


 
Правильный$Вася   (2008-09-26 16:03) [58]


> Поросенок Винни-Пух ©   (26.09.08 14:18) [57]

не обазятально
можно воспользоваться чем-то вроде ClientDataSet, оторванного (вернее, не прилепленного) от базы


 
Поросенок Винни-Пух ©   (2008-09-26 16:30) [59]

можно.
ситуация: пустой датасет и его пока не из чего загружать.
нужно создать надот из трех записей по три поля.
считаем телодвижения:
1. проинициализировать филдефс
2. создать поля.
3. вставить три записи

или ситуация:
есть уже пакет из трех полей.
требуется четвертое.
снова считаем телодвижения ....


 
Правильный$Вася   (2008-09-26 16:34) [60]


> снова считаем телодвижения

и что, пальцев на руке не хватает?

зато все уже сделано внутри, все методы и свойства, только пользуйся
и никаких внешних библиотек тянуть не надо
+ быстрый индексный доступ
+ опять же возможность выгрузить в xml для любителей


 
Поросенок Винни-Пух ©   (2008-09-26 16:38) [61]

и что, пальцев на руке не хватает?

автору вопроса надоело париться с рутинным кодом.
он спрашивает, как не париться с рутинным кодом.
я ему рассказал, как реально перестать париться с рутиной и начать заниматься более интересными вещами.

хотя пальцев на руке и у него и у меня хватает.


 
sniknik ©   (2008-09-26 17:42) [62]

> считаем телодвижения:
в десигне ложим рекордсет на форму (клиентский или ado-шный), добавляем нужные поля, 3 или 4 неважно.
в рантайме делаем вызов CreateDataset();
готово к работе.

> 3. вставить три записи
LoadFromFile()/Stream , 3 записи или 3 000 неважно.

> требуется четвертое.
внезапно, прямо посреди работы программы? или время на перекомпиляцию все таки есть? тогда добавить в десигне к датасету еще поле, или десять, это не проблема. вот с сохранёнными данными, если сохранял в таком формате, уже не поработаешь, это будет проблемой (не очень большой), придётся перекладывать данные в новую структуру.
но с mxl ситуация та же, тем более рекордсет можно выгрузить в формат xml. проще добавлять поля в нем? добавляй. после загрузишь обратно и оно будет "как родное".

> я ему рассказал, как реально перестать париться с рутиной
завязываясь на xml? странные у вас понятия о простоте. имхо, автор именно над самим xml/dom обьектом  и будет больше всего "париться". т.е. пока не поймет будет "парится", а после уже будет жалко бросать им пользоваться, наработки, т.к. тогда придётся признать, что куча времени "коту под хвост".

кстати не пробовал json? из мира линукса аналогичный (текстовый) формат, имхо, намного удобнее и проще xml, при аналогичных достоинствах (сложные структуры держать).
http://www.json.org/
http://ru.wikipedia.org/wiki/JSON


 
Eraser ©   (2008-09-26 17:43) [63]


var
 List: TList<TGUID>;


 
Ega23 ©   (2008-09-26 17:46) [64]


> кстати не пробовал json?


Я чуть-чуть пробовал.


 
Ega23 ©   (2008-09-26 17:46) [65]


> кстати не пробовал json?


На sorceforge даже pas-овский парсер есть.


 
Поросенок Винни-Пух ©   (2008-09-26 17:48) [66]

кстати не пробовал json? из мира линукса аналогичный (текстовый) формат, имхо, намного удобнее и проще xml, при аналогичных достоинствах (сложные структуры держать).

Честно говоря я только по первости рассматривал xml как чудной текстовый файл с тегами. Сегодня он мне интересен постольку поскольку. Будет он бинарным или еще каким - мне уже по барабану.
Мне важнее те средства и технологии которые он мне дает в руки.
А F3 в фаре я на нем все реже и реже нажимаю.

в десигне ложим рекордсет на форму (клиентский или ado-шный), добавляем нужные поля, 3 или 4 неважно.
в рантайме делаем вызов CreateDataset();


Это если есть объект БД, то да. А если его нет, но нужна структура?


 
Ega23 ©   (2008-09-26 17:50) [67]


> Это если есть объект БД, то да.


И если есть и если нет - то да.


 
Поросенок Винни-Пух ©   (2008-09-26 17:51) [68]

странные у вас понятия о простоте

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


 
Поросенок Винни-Пух ©   (2008-09-26 18:01) [69]

И если есть и если нет - то да.

ок, я правильно понял, нет бд, но есть адодатасет и есть клиентдадасет?


 
Ega23 ©   (2008-09-26 18:07) [70]


> ок, я правильно понял, нет бд, но есть адодатасет и есть
> клиентдадасет?


или.

есть ADODataSet или ClientDataSet.
Только в этом случае у них CreateDataSet метод надо вызвать.


 
Поросенок Винни-Пух ©   (2008-09-26 18:10) [71]

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


 
Ega23 ©   (2008-09-26 18:14) [72]


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


Это тебе sniknik © говорит; я ini-файлы использую...  :)


 
Поросенок Винни-Пух ©   (2008-09-26 18:15) [73]

да я помню, помню :)


 
Ega23 ©   (2008-09-26 18:17) [74]


> да я помню, помню :)


Это шутка была.


 
sniknik ©   (2008-09-26 18:18) [75]

> которой вообще к бд нет необходимости обращаться
сколько раз повторять, что и для этих рекогдсетов нет этой необходимости. данные рекордсеты, это самодостаточные обьекты для работы с данными.
ещё раз - НИКАКИХ БД НЕ ТРЕБУЕТСЯ. но и не помешают если возникнет необходимость в более серьезной обработке данных.


 
Поросенок Винни-Пух ©   (2008-09-26 18:20) [76]

я не про необходимость бд и говорю.

скажи тип своего рекордсета и фамилию dpk который ко мне при этом прикомпилится.


 
Правильный$Вася   (2008-09-26 18:28) [77]


>  ко мне при этом прикомпилится

тесно?
для CDS это midaslib размером всего около 300к
зато всегда с собой и никаких заморочек с отсутствием на чужом компе


 
Поросенок Винни-Пух ©   (2008-09-26 18:32) [78]

для CDS это midaslib размером всего около 300к

Мне не тесно. Это я на тему изыточности и тяжести, про которую мен рассказывают.

про кдс снова повторяюсь - сколько телодвижений надо сделать для создания датасета на пустом месте?

+ про тип рекордсета и его пакет хотелось бы узнать до кучи.


 
sniknik ©   (2008-09-26 20:18) [79]

> для CDS это midaslib размером всего около 300к
для ADO это такой же внешний COM сом обьект как и DOM xml, к программе конечно что то добавится, что то же пишется естественно при работе с данными (а типа с xml не так).  

> сколько телодвижений надо сделать для создания датасета на пустом месте?
одно.  читай sniknik ©   (26.09.08 17:42) [62]  
все что делается мастером, не считаем, это не "телодвижения", это "движение носа".

> + про тип рекордсета и его пакет хотелось бы узнать до кучи.
какая тебе разница на тип? берешь любой из указанных двух. работа ведется практически одинаково. различия есть конечно, но чтобы начинать на них ориентироваться, тем более использовать... это не сразу будет и в большинстве случаев не нужно.
и какая разница на пакет? раз тебе все одно "не тесно". и разговор был не о "тяжести" выраженной в килобайтах, а о необходимости "парится" (не знаю что это у тебя значит, только повторяю за тобой...).
ты, имхо, уводишь "спор" в другое русло, несущественными вопросами. зачем?
все, что нужно чтобы проверить уже сказано. просто повторить по шагам (в обратку проверять работу с xml мне нет нужды, я с ним работал, потому и могу сравнивать).


 
Медвежонок Пятачок ©   (2008-09-26 22:58) [80]

в таком случае больше не надо приводить мне аргументы про "избыточность" и "тяжеловесность" xml.

все что делается мастером, не считаем, это не "телодвижения", это "движение носа".

Ну а все таки. Есть пустой рекордсет. Загружать пока не из чего, но структуру создать надо. Я в хмл создам ее за меньшим количеством кода.



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

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

Наверх




Память: 0.64 MB
Время: 0.008 c
2-1223362300
123-ий
2008-10-07 10:51
2008.11.16
Экранирование одинарной кавычки


2-1223363342
Alex_C
2008-10-07 11:09
2008.11.16
Последовательность GroupBox с Align = alTop


15-1221798199
@!!ex
2008-09-19 08:23
2008.11.16
Гугель наглеет.


11-1195480274
INFINITY
2007-11-19 16:51
2008.11.16
Установка MСK на D2006


15-1221485083
stas
2008-09-15 17:24
2008.11.16
Драйвер типа RAM диска





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский