Переключение на Главную Страницу Страницы: 1 2 3 [4]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Универсальные интерфейсы загрузки/выгрузки данных (число прочтений - 28891 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #45 - 28. Июля 2008 :: 06:36
Печать  
artbear писал(а) 25. Июля 2008 :: 09:22:
2. Научить класс CComponentClass для самостоятельной реализации интерфейс загрузки.

3. Или пойти еще дальше и делегировать в сам объект КОП интерфейс загрузки, чтобы КОП мог также служить приемником выгрузки.

Завел баг http://www.1cpp.ru/bugs/show_bug.cgi?id=4022
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #46 - 28. Июля 2008 :: 19:58
Печать  
artbear писал(а) 22. Июля 2008 :: 08:45:
Михаил, давай что-нибудь решим по интерфейсу выгрузки источника.
Примем для себя хоть какой-то, пусть и промежуточный, вариант.

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

Если поглядеть на код Вектор::Загрузить() и Вектор::Выгрузить(), то становится довольно забавно.
Когда-нибудь две телефонные трубки соединять доводилось, чтобы дружбаны могли между собой побазарить? Улыбка
Вот так, коллекции ничего не нужно, кроме реализации двух симметричных интерфейсов.
То же самое можно сделать для остальных контейнеров и прокси-объектов.

По интерфейсам: в принципе, можно использовать.
Я постарался дать развернутое описание, и здесь важно в реализации его поддержать аккуратно.
В том числе - корректно обработать критичные и некритичные ошибки и 0, возвращаемый Init в nRowCount.

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

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #47 - 29. Июля 2008 :: 03:42
Печать  
Фраза "Приемник не должен полагаться на завершение передачи вызовом ldrDone" - это как?
ИМХО успешная передача как раз и должна завершаться вызовом ldrDone, иначе нет смысла огород городить.
Или ты говорил о неуспешном завершении передачи?

PS тоже самое для приемника и pubDone Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #48 - 29. Июля 2008 :: 03:58
Печать  
Еще описание Загрузить в доку забыл занести.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #49 - 29. Июля 2008 :: 08:06
Печать  
artbear писал(а) 29. Июля 2008 :: 03:42:
Фраза "Приемник не должен полагаться на завершение передачи вызовом ldrDone" - это как?
ИМХО успешная передача как раз и должна завершаться вызовом ldrDone, иначе нет смысла огород городить.
Или ты говорил о неуспешном завершении передачи?

PS тоже самое для приемника и pubDone Печаль

Done для этих интерфейсов оказался очень неудобной штукой.
Вот погляди на свой код - у тебя куча мест, где проверяется FAILED(x) и выбрасывается исключение, не доползая до Done.
Можно, конечно, потребовать, выполнения Done при любой аварии.
Но это использовать будет неудобно, а будет ли польза?

artbear писал(а) 29. Июля 2008 :: 03:58:
Еще описание Загрузить в доку забыл занести.

А у тебя нет ощущения, что реализация "Загрузить" и "Выгрузить" - это некий общий алгоритм, который может не принадлежать объекту?
Вот, думаю, не сделать ли некий глобальный сервис обмена данными.
Ну, может не сейчас - а как-нибудь потом.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #50 - 29. Июля 2008 :: 08:39
Печать  
kms писал(а) 29. Июля 2008 :: 08:06:
artbear писал(а) 29. Июля 2008 :: 03:42:
Фраза "Приемник не должен полагаться на завершение передачи вызовом ldrDone" - это как?
ИМХО успешная передача как раз и должна завершаться вызовом ldrDone, иначе нет смысла огород городить.
Или ты говорил о неуспешном завершении передачи?

PS тоже самое для приемника и pubDone Печаль

Done для этих интерфейсов оказался очень неудобной штукой.
Вот погляди на свой код - у тебя куча мест, где проверяется FAILED(x) и выбрасывается исключение, не доползая до Done.
Можно, конечно, потребовать, выполнения Done при любой аварии.
Но это использовать будет неудобно, а будет ли польза?

Так ты прочти выше мою фразу.
Я предлагаю юзать Done только при успешном завершении выгрузки!
Done уже пригодился для выгрузки в ТЗ на форме.
Еще может пригодиться для какого-нибудь контейнера, который может каким-то образом оптимизировать выгрузку, например, кешируя данные в ldrAddRow и отправляя их окончательно только в Done - т.е. скорость за счет памяти и т.д.

т.е. Done - нужная вещь Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #51 - 29. Июля 2008 :: 08:40
Печать  
kms писал(а) 29. Июля 2008 :: 08:06:
artbear писал(а) 29. Июля 2008 :: 03:58:
Еще описание Загрузить в доку забыл занести.

А у тебя нет ощущения, что реализация "Загрузить" и "Выгрузить" - это некий общий алгоритм, который может не принадлежать объекту?
Вот, думаю, не сделать ли некий глобальный сервис обмена данными.
Ну, может не сейчас - а как-нибудь потом.

Да, есть такое, конечно Улыбка
А с другой стороны, кто лучше объекта может знать, как выгружать принадлежащие ему данные Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #52 - 29. Июля 2008 :: 09:16
Печать  
artbear писал(а) 29. Июля 2008 :: 08:39:
Я предлагаю юзать Done только при успешном завершении выгрузки!
Done уже пригодился для выгрузки в ТЗ на форме.
Еще может пригодиться для какого-нибудь контейнера, который может каким-то образом оптимизировать выгрузку, например, кешируя данные в ldrAddRow и отправляя их окончательно только в Done - т.е. скорость за счет памяти и т.д.

т.е. Done - нужная вещь Улыбка

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

Но теперь Done - обязателен в том числе и при неуспешном завершении.
Ибо и в случае неуспеха также необходимо освобождать ресурсы.
В принципе, это несложно сделать - для коллекций достаточно было добавить два смартпойнтера.

P.S.
Да, и Done - теперь типа деструктора, исключений не бросает и ошибок не возвращает.
Соответственно, инициатор коды ошибок Done проверять не обязан.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #53 - 29. Июля 2008 :: 09:19
Печать  
artbear писал(а) 29. Июля 2008 :: 08:40:
А с другой стороны, кто лучше объекта может знать, как выгружать принадлежащие ему данные Улыбка

Ага Улыбка
Поэтому даже если будет глобальный сервис, параметризация загрузки и выгрузки все равно будет за самими объектами.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #54 - 29. Июля 2008 :: 09:31
Печать  
kms писал(а) 29. Июля 2008 :: 09:16:
artbear писал(а) 29. Июля 2008 :: 08:39:
Я предлагаю юзать Done только при успешном завершении выгрузки!
Done уже пригодился для выгрузки в ТЗ на форме.
Еще может пригодиться для какого-нибудь контейнера, который может каким-то образом оптимизировать выгрузку, например, кешируя данные в ldrAddRow и отправляя их окончательно только в Done - т.е. скорость за счет памяти и т.д.

т.е. Done - нужная вещь Улыбка

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

Но теперь Done - обязателен в том числе и при неуспешном завершении.
Ибо и в случае неуспеха также необходимо освобождать ресурсы.

"Но теперь Done - обязателен в том числе и при неуспешном завершении." - так сделаем?
Тогда нужно исправлять реализации универсальной выгрузки для ИТЗ - Выгрузить и ВыгрузитьСтроку + коллекции (Вектор/АссоцВектор).
Ты их исправлял?

  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #55 - 29. Июля 2008 :: 09:33
Печать  
artbear писал(а) 29. Июля 2008 :: 09:31:
"Но теперь Done - обязателен в том числе и при неуспешном завершении." - так сделаем?
Тогда нужно исправлять реализации универсальной выгрузки для ИТЗ - Выгрузить и ВыгрузитьСтроку + коллекции (Вектор/АссоцВектор).
Ты их исправлял?

Я исправил Вектор::Загрузить(), Вектор::Выгрузить(), АссоциативныйВектор::Загрузить(), АссоциативныйВектор::Выгрузить().
Ну и описание поправил.

А остальное не менял.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #56 - 29. Июля 2008 :: 10:02
Печать  
Исправил остальное - ldrDone сделан обязательным.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #57 - 29. Июля 2008 :: 10:03
Печать  
artbear писал(а) 29. Июля 2008 :: 03:58:
Еще описание Загрузить в доку забыл занести.

Для Вектор и АссоциативныйВектор !
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #58 - 29. Июля 2008 :: 11:37
Печать  
Кстати, для проверки различных загрузчиков нужно сделать тесты для проверки копирования значений.
А то вдруг где-то мы ошиблись, и происходит передача по ссылке в новый контейнер Печаль
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Patison
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 10
Зарегистрирован: 18. Февраля 2009
Re: Универсальные интерфейсы загрузки/выгрузки данных
Ответ #59 - 29. Июня 2009 :: 17:07
Печать  
...Удалено
« Последняя редакция: 29. Июня 2009 :: 18:08 - Patison »  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 
ОтправитьПечать