Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наследники TList


Страницы:   1 2 3 4 5

Добежал ©   (2008-09-24 18:19:00) 

Думаю, в любом крупном проекте используется TList, так как постоянно возникает необходимость хранить списки с некоей информацией. И тут возможны два подхода:

1) когда о содержимом TList знает только "вышестоящий" класс, он и типизирует информацию:

TMySuperClass = class(...)
...
 FClientList: TList;
...
end;


Реализация:

constructor TMySuperClass.create;
begin
...
 FClientList := TList.Create;
...
end;

destructor TMySuperClass.destroy;
var
 i: integer;
begin
...
 for i:=0 to FClientList.Count - 1 do
   Dispose(PClientInfo(FClientList[i]));
 FClientList.Free;
end;


Можно немного продвинутей писать (продвинутей ли?), если в классе происходит удаление какого-то клиента во время работы, то ввести функцию DeleteClientByPos:

function DeleteClientByPOS(iPos: integer): boolean;
begin
 if (iPos >=0) and (iPos < FClientList.Count) then
 begin
   Dispose(FClientList[iPos]);
   FClientList.delete(iPos);
   Result := true;
 end
 else Result := false;
end;


Тогда деструктор поменять можно на:

for i:=FClientList.Count-1 downto 0 do
 DeleteClientByPOS(i);


суть не меняется.

2) второй же вариант - это написание каждый раз наследника TList, который будет уметь работать именно с типизированными указателями нужной структуры.

Второй вариант по идеологии правильней, но каждый раз писать... А ведь таких списков может быть десятки, сотни... тысячи. Да и шаблоны дельфи не поддерживает.

Кто как делает? Еще фишка в том, что половина модуля может состоять потом из реализаций TList'ов. Выносить в отдельный модуль uData? Или uLister какой-нибудь ;)

А наверняка еще и парадигма мож какая имеется на эту тему? Жду отзывов кто как делает ;)


Ega23   (2008-09-26 18:17:00) [21]


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


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


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

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


Ega23   (2008-09-26 18:14:00) [23]


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


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


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

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


Ega23   (2008-09-26 18:07:00) [25]


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


или.

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


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

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

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


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

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

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


Ega23   (2008-09-26 17:50:00) [28]


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


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


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

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

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

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


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


Ega23   (2008-09-26 17:46:00) [30]


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


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


Ega23   (2008-09-26 17:46:00) [31]


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


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


Eraser   (2008-09-26 17:43:00) [32]


var
 List: TList<TGUID>;


sniknik   (2008-09-26 17:42:00) [33]

> считаем телодвижения:
в десигне ложим рекордсет на форму (клиентский или 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


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

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

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

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


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


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

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

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


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

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

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


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


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

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


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

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

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


sniknik   (2008-09-26 14:18:00) [39]

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


sniknik   (2008-09-26 14:14:00) [40]

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

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


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


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо