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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Универсальные интерфейсы загрузки/выгрузки данных
15. Июля 2008 :: 08:35
Печать  
В продолжение тем
Коллекции в 1С++ ( http://www.1cpp.ru/forum/YaBB.pl?num=1215152763/0 )
и 1sqlite ( http://www.1cpp.ru/forum/YaBB.pl?num=1214205575/251#251 )

предлагаю в этой ветке обсуждать универсальные интерфейсы выгрузки / загрузки данных.

Сейчас в 1sqlite и icpp 3.0 реализованы похожие интерфейсы для загрузки произвольных данных на базе CValue.
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #1 - 15. Июля 2008 :: 08:40
Печать  
kms писал(а) 15. Июля 2008 :: 08:21:
artbear писал(а) 15. Июля 2008 :: 04:48:
Я пока что предлагаю добавить хотя бы ldrDone, без него, например, не сделаешь нормальную выгрузку в таблицу значений / список значений на форме, т.к. негде вернуть флаг Refresh и обновить элемент после загрузки данных.

А.
Зачем, говоришь нужен Done в интерфейсе выгрузки?
Может быть, перенести обсуждение в отдельную ветку?

В ИТЗ::Выгрузить есть метод UnloadToVT - выгрузка ИТЗ в ТаблицуЗначений.
Данный метод вроде бы умеет нормально работать с ТЗ на форме, т.е. во время загрузки данных в подобную ТЗ не происходит постоянной тормозной перерисовки данных.
Вроде этой твой код Улыбка твои отпечатки остались.

Т.е. перед выгрузкой запрещается автообновление ТЗ на форме, а после выгрузки разрешается.
Т.е. первую часть выполняем в обработчике загрузки в ldrInit, а для второй нужна операция завершения ldrDone, без нее не удастся разрешить подобную проблему.

В принципе, я уже добавил ldrDone к нашему общему интерфейсу, все нормально работает.
Тем более, что и вы с Сашей также пришли к этому завершающему методу Done.
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #2 - 15. Июля 2008 :: 09:06
Печать  
artbear писал(а) 15. Июля 2008 :: 08:35:
предлагаю в этой ветке обсуждать универсальные интерфейсы выгрузки / загрузки данных.


По поводу...
Можно вопрос чайника?
Предположим есть com-сервер, у которого есть метод возвращающий ссылку на массив
return @array
Нет ли способа получить как либо этот массив (ИТ или ТЗ) в среде 1С?
В массиве только простые типы.
Или только в цикле поэлементно?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #3 - 15. Июля 2008 :: 09:15
Печать  
kiruha писал(а) 15. Июля 2008 :: 09:06:
Предположим есть com-сервер, у которого есть метод возвращающий ссылку на массив
return @array
Нет ли способа получить как либо этот массив (ИТ или ТЗ) в среде 1С?
В массиве только простые типы.
Или только в цикле поэлементно?

Пока никак Печаль
Но очень скоро вполне можно будет.
Развернутый пример дать можешь?
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #4 - 15. Июля 2008 :: 09:45
Печать  
artbear писал(а) 15. Июля 2008 :: 09:15:
kiruha писал(а) 15. Июля 2008 :: 09:06:
Предположим есть com-сервер, у которого есть метод возвращающий ссылку на массив
return @array
Нет ли способа получить как либо этот массив (ИТ или ТЗ) в среде 1С?
В массиве только простые типы.
Или только в цикле поэлементно?

Пока никак Печаль
Но очень скоро вполне можно будет.
Развернутый пример дать можешь?


Так как раз думаю. Появилась идея написать DCOM-сервер на FoxPro - тогда запросы можно выполнять
на физическом сервере.
Непонятно только как возвращать данные - через возврат простых типов долго,  через создание временных
файлов ДБФ - лучше, но не настолько...


P.S>В принципе же наверно лучше универсальный способ, не привязанного к конкретному com-серверу ?
Или просто нужен для тестов?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #5 - 15. Июля 2008 :: 10:01
Печать  
У COM есть какой-то универсальный интерфейс для возврата массивов/коллекций, правда, названия не помню.
Можно в 1С++ сделать спец.оболочку для этого интерфейса. Это оболочка/прокси-объект и реализует необходимую работу по получению данных из этого интерфейса.
Нужно просто вспомнить название интерфейса и как с ним работать.
По идее не должно быть сложно Улыбка
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #6 - 15. Июля 2008 :: 10:09
Печать  
artbear писал(а) 15. Июля 2008 :: 10:01:
У COM есть какой-то универсальный интерфейс для возврата массивов/коллекций, правда, названия не помню.
Можно в 1С++ сделать спец.оболочку для этого интерфейса. Это оболочка/прокси-объект и реализует необходимую работу по получению данных из этого интерфейса.
Нужно просто вспомнить название интерфейса и как с ним работать.
По идее не должно быть сложно Улыбка


Было бы супер.  Улыбка
Мир com-ов достаточно обширен, даже 1СV8:)

Пример кода(из докуметации) .
На сервере FoxPro
Цитата:
Вы можете возвращать массивы, как элементы некоторого класса, при помощи специального оператора @.Возврат массивов из методов Класса позволяет использовать технологиюкомпонент Visual FoxPro COM, когда используемые компоненты написаны надругих языках программирования:  Visual Basic / Visual C++. В этомслучае используется ключевое слово IMPLEMENTS при описании класса COM.

..используется прямая адресация элементов массива...

Код
Выбрать все
DEFINE CLASS t1 AS custom OLEPUBLIC
DIMENSION Arrayelement[3]
FUNCTION GetMyArray() AS array
   this.Arrayelement[1] = 1
   this.Arrayelement[2] = 2
   this.Arrayelement[3] = 3
   RETURN @THIS.Arrayelement
ENDFUNC
ENDDEFINE 


Вызов в Fox
Код
Выбрать все
ComServer=CreateObject("myserver.t1")
myArray=ComServer.GetMyArray()
?myArray[1]
?myArray[2]  



В прикрепленном файле реализация этого простого сервера.
Чтобы заработал нужно зарегить
myserver.exe /regserver
Убрать регистрацию myserver.exe /Unregserver
« Последняя редакция: 15. Июля 2008 :: 11:37 - kiruha »  

ComServer.rar ( 17 KB | Загрузки )
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #7 - 15. Июля 2008 :: 11:28
Печать  
Ну и готовый примерчик передачи COM-коллекции не помешал бы Улыбка
Типа нажал, запустил и т.д.
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #8 - 15. Июля 2008 :: 11:36
Печать  
В icpp реализован еще один прокси-объект для загрузки в табличную часть документа.
Теперь метод ИТЗ::Выгрузить практически выродился и стал очень маленьким и простым, все на интерфейсах.
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #9 - 15. Июля 2008 :: 11:39
Печать  
artbear писал(а) 15. Июля 2008 :: 11:28:
Ну и готовый примерчик передачи COM-коллекции не помешал бы Улыбка
Типа нажал, запустил и т.д.


Приложил выше постом.
Там возвращается простой массив, но ничто не мешает выполнить любой запрос -
т.е. в реализации особых сложностей нет.

Приложен exe вместе с проектом на Fox
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #10 - 15. Июля 2008 :: 11:45
Печать  
kiruha писал(а) 15. Июля 2008 :: 11:39:
Приложен exe вместе с проектом на Fox

А где ты Фокс собираешь? 9 версию где можно скачать нахаляву?
Халяву можно в личку написать Улыбка
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #11 - 15. Июля 2008 :: 11:49
Печать  
Вот про COM-коллекции хорошо расписано
http://www.rsdn.ru/article/com/comcoll.xml
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #12 - 15. Июля 2008 :: 11:55
Печать  
kiruha писал(а) 15. Июля 2008 :: 11:39:
Приложен exe вместе с проектом на Fox

При запуске ехе ругается на невозможность найти рантайм-библиотеку Фокса Печаль
  

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



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #13 - 15. Июля 2008 :: 12:01
Печать  
artbear писал(а) 15. Июля 2008 :: 11:55:
kiruha писал(а) 15. Июля 2008 :: 11:39:
Приложен exe вместе с проектом на Fox

При запуске ехе ругается на невозможность найти рантайм-библиотеку Фокса Печаль


Chieftain http://www.1cpp.ru/forum/YaBB.pl?num=1210677779/25#25

Компилирую в Fox.
Где в сети полный - не знаю - я купил диск - но он много места - вариант от Chieftain позволяет редактировать
проекты?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #14 - 15. Июля 2008 :: 12:05
Печать  
artbear писал(а) 15. Июля 2008 :: 11:55:
kiruha писал(а) 15. Июля 2008 :: 11:39:
Приложен exe вместе с проектом на Fox

При запуске ехе ругается на невозможность найти рантайм-библиотеку Фокса Печаль

Нашел библиотеки.
  

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



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #15 - 15. Июля 2008 :: 12:28
Печать  
kiruha писал(а) 15. Июля 2008 :: 09:45:
Так как раз думаю. Появилась идея написать DCOM-сервер на FoxPro - тогда запросы можно выполнять
на физическом сервере.
Непонятно только как возвращать данные - через возврат простых типов долго,  через создание временных
файлов ДБФ - лучше, но не настолько...


P.S>В принципе же наверно лучше универсальный способ, не привязанного к конкретному com-серверу ?
Или просто нужен для тестов?

Делал подобное на delphi только на TCP, передавал через Stream и возврат результата в ТЗ простых типов,
прирост был за счет маленьких выборок из больших таблиц  Подмигивание

Будет возможность через интерфейсы из набора данных получать ТЗ, ИТ с типизацией значений по id?

Цитата:
В массиве только простые типы.
Или только в цикле поэлементно?

И без цикла по ячейкам, будет заполнение?
Будет доступ к интерфейсу например из delphi, VB?
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #16 - 15. Июля 2008 :: 12:46
Печать  
Если интересно - Создание сервера пошагово в Fox (по Клепенину)

1.Меню \"Новый проект" например myserver
2.Добавить програмный файл (prg) - в нем
3. Определить класс (написать строку)
DEFINE CLASS t1 AS custom OLEPUBLIC или другой
ключ слово OLEPUBLIC -т.е.  доступный по com
4. Добавить методы, например FUNCTION GetMyArray() AS array
5. кнопка Buld... Выбрать Win .../ com server(exe) - OK
- т.е. скомпилировать
6.меню Project \ Project Info \ закладка Server \Instancing - Single Use \ OK
создавать отдельные инстанции (экземпляры) com-серверов

Все - Можно работать на сервере с com-сервером

Для клиентов
7.установить и зарегестрировать у клиентов com-сервер
8. У клиентов в консоль mmc добавить оснастку службы компонентов
9. Служба компонентов \Мой компьютер \ настройка DCOM \ myserver\свойства- задаем где запускать приложение
(на сервере)
10. Дать права клиентам запускать приложение на сервере.
  
Наверх
 
IP записан
 
kiruha
1c++ power user
Отсутствует



Сообщений: 1249
Зарегистрирован: 11. Апреля 2007
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #17 - 15. Июля 2008 :: 12:59
Печать  
PVR писал(а) 15. Июля 2008 :: 12:28:
Будет возможность через интерфейсы из набора данных получать ТЗ, ИТ с типизацией значений по id?

Цитата:
В массиве только простые типы.
Или только в цикле поэлементно?

И без цикла по ячейкам, будет заполнение?
Будет доступ к интерфейсу например из delphi, VB?


Все просто -
1. Серверу передали текст запроса и возможно параметры.
2. Сервер выполнинил запрос и вернул результат ввиде массива
3. Массив преобразовали в ТЗ (типы - только строки и числа).
4. Далее с ТЗ работаем в 1С.

Типизация в объекты 1С видимо "вручную".

P.S> Вообще тема  шире - прокси оболчка для работы com-объектов, сервер FoxPro я привел как пример.
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #18 - 15. Июля 2008 :: 13:13
Печать  
artbear
Доступ к 1C++ "ун. интерфейсам загрузки/выгрузки" будет из других яз. нпример Delphi,VB или только С++?

kiruha
Если будешь делать сервер к FOXу, то сделай пожалуйста TCP/IP сервер Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #19 - 18. Июля 2008 :: 13:12
Печать  
Продолжаю по универсальным интерфейсам.
Вопрос - как с помощью универсального механизма варьировать варианты выгрузки?
например, ИТЗ::ВыгрузитьВСтроку(Приемник)
если приемник - СЗ, то удобно выгружать как значения, так и колонки как представление
если же приемник - вектор, то выгрузить можно либо только имена, либо только значения
если же приемник - ТЗ, то выгрузить можно любой набор колонок или всю таблицу.

Как эти ситуации будем разруливать?
Или все-таки пусть приемники или прокси-объкты сами разруливают, а источник выгружает все единым образом?
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #20 - 18. Июля 2008 :: 16:30
Печать  
artbear писал(а) 18. Июля 2008 :: 13:12:
Или все-таки пусть приемники или прокси-объкты сами разруливают, а источник выгружает все единым образом?

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

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #21 - 19. Июля 2008 :: 18:31
Печать  
Наверное, вот в чем вопрос:
Код
Выбрать все
	if (nLoaderColumns != 1 && typeid(*pLoader) == typeid(CVLResultLoader)) // TODO это условие для СЗ нужно более красиво исправить, желательно без typeid
		RuntimeError("Передано неверное число колонок");
 


Ты можешь это дело разруливать универсально штатным образом.
Если CVLResultLoader считает, что предоставление большего числа колонок, чем он может принять, это противозаконно - пусть возвращает ошибку в Init.
Это приведет к исключению, которое тебе и нужно.

Другой вариант - просто ограничивать источник по числу колонок, не считая это аварийной ситуацией.
В этом случае Init ошибку возвращать не должен.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #22 - 21. Июля 2008 :: 03:20
Печать  
kms писал(а) 19. Июля 2008 :: 18:31:
Наверное, вот в чем вопрос:
Код
Выбрать все
	if (nLoaderColumns != 1 && typeid(*pLoader) == typeid(CVLResultLoader)) // TODO это условие для СЗ нужно более красиво исправить, желательно без typeid
		RuntimeError("Передано неверное число колонок");
 


Ты можешь это дело разруливать универсально штатным образом.
Если CVLResultLoader считает, что предоставление большего числа колонок, чем он может принять, это противозаконно - пусть возвращает ошибку в Init.
Это приведет к исключению, которое тебе и нужно.

Другой вариант - просто ограничивать источник по числу колонок, не считая это аварийной ситуацией.
В этом случае Init ошибку возвращать не должен.

Да, именно из-за этого кода.
А вообще я согласен, просто хотелось узнать еще доп. точки зрения.
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #23 - 22. Июля 2008 :: 08:45
Печать  
kms
Михаил, давай что-нибудь решим по интерфейсу выгрузки источника.
Примем для себя хоть какой-то, пусть и промежуточный, вариант.
И начнем с ним работать.
Мне, в принципе, нравится вариант Саши, но пока предлагаю сделать строго по аналогии с нашим интерфейсом приемника - т.е. коды ошибок HRESULT.
В случае чего потом будет легче исправить.

Код
Выбрать все
class IValuesDataSource
{
public:
	virtual HRESULT vdsInit(DWORD& colCount, DWORD& rowCount) throw() = 0;
	virtual HRESULT vdsAddColumnInfo(DWORD colIdx, CString& colName, CType* pType) throw() = 0;
	virtual HRESULT vdsGetNextValues(CValue const* const* &ppVals) throw() = 0;
	virtual CString vdsGetLastErrorMessage() throw() = 0;
}; 

  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #24 - 22. Июля 2008 :: 15:16
Печать  
Артур, если я сказал, что сделаю, значит сделаю.
Я рад, что ты поддерживаешь идею, но не надо бежать впереди паровоза.
Все же это моя идея, мой интерфейс и мое право думать над ним до посинения.

Если ты реально хочешь форсировать решение, давай начнем думать.
Итак, для возврата ошибки у нас будет функция GetLastError.

Достаточно иметь одну такую функцию на объект (как это предлагает Саша).
Или статус ошибки - это принадлежность конкретного интерфейса?

Аргументируй, пожалуйста.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #25 - 23. Июля 2008 :: 06:16
Печать  
kms писал(а) 22. Июля 2008 :: 15:16:
Достаточно иметь одну такую функцию на объект (как это предлагает Саша).
Или статус ошибки - это принадлежность конкретного интерфейса?

Аргументируй, пожалуйста.

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

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #26 - 23. Июля 2008 :: 06:19
Печать  
artbear писал(а) 23. Июля 2008 :: 06:16:
Мне нравится простой вариант с HRESULT как наиболее универсальный именно потому, что статус ошибки принадлежит конкретной реализации интерфейса.

Не, я имею в виду функцию GetLastError().

Достаточно одной такой функции на все интерфейсы (как у Саши)?
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #27 - 23. Июля 2008 :: 07:32
Печать  
kms писал(а) 23. Июля 2008 :: 06:19:
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.

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

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #28 - 23. Июля 2008 :: 18:50
Печать  
artbear писал(а) 23. Июля 2008 :: 07:32:
kms писал(а) 23. Июля 2008 :: 06:19:
Или есть необходимость получать отложенно разные ошибки при использовании нескольких интерфейсов в одном объекте?
У нас пока GetLastError в инт. выгрузки принадлежит интерфейсу и ни с кем не разделяется.

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

Воот.

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

1. вызвал метод
2. получил код ошибки
3. если надо - получил расшифровку ошибки.

Привязка расшифровки ошибки к конкретному интерфейсу (а не к объекту) позволяет менее строгую схему:

1. вызвал метод интерфейса А.
2. получил код ошибки
3. вызвал метод интерфейса Б
4. получил код ошибки
5 получил расшифровку ошибки Б
6. получил расшифровку ошибки А

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

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

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #29 - 24. Июля 2008 :: 11:57
Печать  
ИМХО удобна была бы фича - методы Выгрузить(Приемник, ....) должны возвращать значение Приемника, а не абстрактные числа и т.д.
В этом случае становится удобным писать код типа Вектор.Выгрузить(ТЗ).Показать или что-то более сложное и удобное.

Естественно, это относится к новым методам Выгрузить - Вектор, АссоцВектор, ИТЗ::ВыгрузитьСтроку и т.п.

Давно существующие методы Выгрузки ради совместимости менять не будем.
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #30 - 25. Июля 2008 :: 06:13
Печать  
artbear писал(а) 24. Июля 2008 :: 11:57:
ИМХО удобна была бы фича - методы Выгрузить(Приемник, ....) должны возвращать значение Приемника, а не абстрактные числа и т.д.
В этом случае становится удобным писать код типа Вектор.Выгрузить(ТЗ).Показать или что-то более сложное и удобное.

Наверное к концу недели я становлюсь излишне ортодоксален.
Но нет, не убедил.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #31 - 25. Июля 2008 :: 09:11
Печать  
Нарисовался баг Печаль http://www.1cpp.ru/bugs/show_bug.cgi?id=4019

Цитата:
Оказывается, что универсальный интерфейс загрузки -
универсальный метод Выгрузить не умеет работать с
КОП-наследниками от СписокЗначений/ТаблицаЗначений

Мне казалось, что я написал для этого спец.код, который и работал.
Но первый же тест показал мою ошибку Улыбка Печаль
Буду исправлять.

В то же время выгрузка в наследники от Вектора/АссоцВектора
работает.
Т.е. Вектор.Выгрузить(НаследникОтВектор) работает.

А Вектор.Выгрузить(НаследникОтСписокЗначений) не работает, дает
исключение.
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #32 - 25. Июля 2008 :: 09:22
Печать  
Есть несколько вариантов исправления.
Нужно выбрать лучший Улыбка

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

2. Научить класс CComponentClass для самостоятельной реализации интерфейс загрузки.
Но в этом случае неясная ситуация с классом, у которого нет предков с реализованным интерфейсом загрузки. Единственный выход - это выдавать ошибку в методе интерфейса ldrInit

Зато в этом случае КОП может четко узнать о загрузке данных в его предка. Например, можно сделать 2 метода-события, вызываемых до загрузки и после загрузки.

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

Например, если в КОП-е есть методы
Число РеализуемИнтерфейсЗагрузки() - или это лишний метод в этом случае?
Число СобытиеЗагрузки_НачалоЗагрузки(КолвоКолонок, КолвоСтрок)
Число СобытиеЗагрузки_ДобавитьКолонку(...)
Число СобытиеЗагрузки_ДобавитьДанные(Контейнер) - сюда передавать какой-нибудь контейнер, проще всего Вектор.
Число СобытиеЗагрузки_ОкончаниеЗагрузки(КолвоКолонок, КолвоСтрок)

Если же этих методов нет или РеализуемИнтерфейсЗагрузки возвращает 0, тогда используем п.2

Мне лично п.3 очень нравится Улыбка
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #33 - 25. Июля 2008 :: 09:50
Печать  
Ну, раз нравится п.3 - так почему бы и нет.
И для загрузки можно такое же изобразить будет.

А если класс не реализует интерфейсы загрузки - тогда искать среди родителей.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #34 - 25. Июля 2008 :: 10:00
Печать  
kms писал(а) 25. Июля 2008 :: 09:50:
Ну, раз нравится п.3 - так почему бы и нет.
И для загрузки можно такое же изобразить будет.

А если класс не реализует интерфейсы загрузки - тогда искать среди родителей.

Да, для загрузки само собой.
"если класс не реализует интерфейсы загрузки" будем определять как?
наличием в классе всех 4-х обработчиков "СобытиеЗагрузки_" ?
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #35 - 25. Июля 2008 :: 10:22
Печать  
artbear писал(а) 25. Июля 2008 :: 10:00:
"если класс не реализует интерфейсы загрузки" будем определять как?
наличием в классе всех 4-х обработчиков "СобытиеЗагрузки_" ?

Ну не знаю... придумай что-нибудь. Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #36 - 25. Июля 2008 :: 10:44
Печать  
Для универсальности завел еще один интерфейс IQueryInterface_Loader_Unloader c методами
BOOL IsLoader() и BOOL IsUnloader()
типа если классу нужна вариативность с поддержкой интерфейсами загрузки/выгрузки (как у КОП), то он реализует данный интерфейс и обязан реализовать соответствующие интерфейсы загрузки или выгрузки.
Если вариативности не нужно, все остается как сейчас.

ЗЫ интерфейсы рулят Улыбка
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #37 - 25. Июля 2008 :: 10:53
Печать  
artbear писал(а) 25. Июля 2008 :: 10:44:
Для универсальности завел еще один интерфейс IQueryInterface_Loader_Unloader c методами
BOOL IsLoader() и BOOL IsUnloader()

А зачем это нужно?
Разве того факта, что класс реализует данные интерфейсы недостаточно, чтобы определить, что он IsLoader или IsUnloader?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #38 - 25. Июля 2008 :: 10:59
Печать  
А как я для CComponentClass должен поступить - когда КОП может реализовывать интерфейс, а может, не реализовывать, т.е. проверка на этапе выполнения
А CComponentClass должен на этапе компиляции показать реализацию унив.интерфейса загрузки.

Я потому и спрашивал ранее, может быть, в ldrInit тупо возвращать код ошибки ?
ИМХО иначе без спец.интерфейса подтверждения реализации унив.интерфейса загрузки/выгрузки не обойтись Печаль

ЧТо скажешь?
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #39 - 25. Июля 2008 :: 11:12
Печать  
Я думаю, не нужен такой общий интерфейс.

Лучше сделать более интеллектуальное преобразование CComponentClass в интерфейс загрузки.
Например, в процессе преобразования типа Type2ResultLoader опрашивать сам CComponentClass, действительно ли он поддерживает интерфейс загрузки/выгрузки, или только делает вид.

Если "делает вид" - то продолжать поиск среди родителей.

P.S.
В любом случае, ты столкнешься с проблемой, когда попробуешь выгрузить в класс 1С++ что-то из 1sqlite, например.
Но это уже другой вопрос. Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #40 - 25. Июля 2008 :: 11:16
Печать  
kms писал(а) 25. Июля 2008 :: 11:12:
Лучше сделать более интеллектуальное преобразование CComponentClass в интерфейс загрузки.
Например, в процессе преобразования типа Type2ResultLoader опрашивать сам CComponentClass, действительно ли он поддерживает интерфейс загрузки/выгрузки, или только делает вид.

Если "делает вид" - то продолжать поиск среди родителей.

P.S.
В любом случае, ты столкнешься с проблемой, когда попробуешь выгрузить в класс 1С++ что-то из 1sqlite, например.
Но это уже другой вопрос. Улыбка

Как раз чтобы универсально опрашивать любой объект Улыбка и нужен подобный интерфейс Улыбка
Не хочется, как всегда, вставлять блоки типа if(type)

Почему будут проблемы при 1sqlite ?
1. у нас пока что интерфейсы все-таки разные Улыбка
2. как интерфейсы совпадут, проблемы быть не должно при нормальной реализации интерфейса.
Пример - ПоставщикТП в виде класса 1С++ Улыбка
  

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: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #41 - 25. Июля 2008 :: 11:21
Печать  
Когда интерфейсы совпадут, окажется, что для CComponentClass невозможно получить интерфейс простым преобразованием rtti.
Типа dynamic_cast<IGeneralResultLoader*>(CComponentClass*).
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #42 - 25. Июля 2008 :: 11:29
Печать  
Ну, в принципе, если тебе надо помоделировать - то не вопрос.
Только не заставляй меня в векторах (например) поддерживать еще и интерфейс IsLoader_Unloader. Подмигивание
Лучше поколдуй над CComponentClass, а если что, подумаем, не надо ли чего улучшить.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #43 - 25. Июля 2008 :: 11:34
Печать  
artbear писал(а) 25. Июля 2008 :: 10:44:
Для универсальности завел еще один интерфейс IQueryInterface_Loader_Unloader c методами
BOOL IsLoader() и BOOL IsUnloader()
типа если классу нужна вариативность с поддержкой интерфейсами загрузки/выгрузки (как у КОП), то он реализует данный интерфейс и обязан реализовать соответствующие интерфейсы загрузки или выгрузки.
Если вариативности не нужно, все остается как сейчас.

ЗЫ интерфейсы рулят Улыбка


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

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Универсальные интерфейсы загрузки/выгрузки дан
Ответ #44 - 25. Июля 2008 :: 11:35
Печать  
kms писал(а) 25. Июля 2008 :: 11:21:
Когда интерфейсы совпадут, окажется, что для CComponentClass невозможно получить интерфейс простым преобразованием rtti.
Типа dynamic_cast<IGeneralResultLoader*>(CComponentClass*).

Правильно, так это и сейчас нельзя сделать Печаль
Т.к. CComponentClass должен знать о попытке его преобразования к IGeneralResultLoader, иначе косяк Улыбка
В общем, схема нарисовалась, получается очень универсально.
Почти сделал уже Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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] 
ОтправитьПечать