Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Модульность - обмен данными (число прочтений - 7292 )
Uzhast
1c++ power user
Отсутствует



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Модульность - обмен данными
21. Марта 2008 :: 10:08
Печать  
В настоящее время у нас есть подсистема прямых запросов, которая позволяет получить результат выполнения запроса в ТЗ или ИТЗ. Мне кажется, можно развить немного тему обмена данными между различными модулями компоненты. Например, чем плоха загрузка результатов запроса в ИТЗ? Тем, что подсистема прямых запросов обязана знать про существование ИТЗ и уметь с ней взаимодействовать.

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

Плюс другие модули смогут получать данные запроса. Например, это можно использовать в построителе отчетов, создание которого не за горами. Или это можно использовать для обмена данными между Йокселем и ИТЗ - например, можно будет через интерфейс получить содержимое табличного документа в ИТЗ и как-то манипулировать этими данными: сортировать, группировать, сворачивать и т.д.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #1 - 21. Марта 2008 :: 14:14
Печать  
Нормальная схема, мы о ней давно говорим Улыбка
Будем пытаться внедрять.
Я, например, сейчас пытаюсь отрефакторить до определенного предела все, что связано с ООП, потом оставлю публичную часть, вот и будет готовый модуль для работы с КОП.
В качестве направляющих для модульности буду использовать твой старый проект разбиения 1С++ на модули. Кажется, он был на базе 203?
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #2 - 21. Марта 2008 :: 17:26
Печать  
artbear писал(а) 21. Марта 2008 :: 14:14:
В качестве направляющих для модульности буду использовать твой старый проект разбиения 1С++ на модули. Кажется, он был на базе 203?

Лучше не надо. Это старая хрень, сделанная во многом наспех. Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #3 - 22. Марта 2008 :: 09:46
Печать  
А почему для обмена между модулями не использовать интерфейсы, они же специально для этого предназначены?
Какие вы видите плюсы и минусы этого решения?
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #4 - 24. Марта 2008 :: 13:08
Печать  
artbear писал(а) 22. Марта 2008 :: 09:46:
А почему для обмена между модулями не использовать интерфейсы, они же специально для этого предназначены?
Какие вы видите плюсы и минусы этого решения?

Вообще-то имеется в виду как раз интерфейс. Возможно, не в смысле COM-интерфейса, а интерфейс в смысле C++: абстрактный класс с чисто виртуальными функциями.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Модульность - обмен данными
Ответ #5 - 24. Марта 2008 :: 13:31
Печать  
А в каком виде с помощью интерфейса данные будем получать?
В виде обычных классов или для каждого типа нетривиальных данных тоже по интерфейсу будем делать?
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #6 - 24. Марта 2008 :: 13:34
Печать  
kms писал(а) 24. Марта 2008 :: 13:31:
А в каком виде с помощью интерфейса данные будем получать?
В виде обычных классов или для каждого типа нетривиальных данных тоже по интерфейсу будем делать?

Я имею в виду данные, того типа, что обычно хранятся в объектах типа ТЗ или ИТЗ. В этом случае просто будет получение массива объектов CValue для строки. Или ты хочешь от CValue совсем отвязаться?
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Модульность - обмен данными
Ответ #7 - 24. Марта 2008 :: 13:54
Печать  
Да вот не знаю пока.

Я к чему клоню - структура абстрактного класса С++ без данных не зависит от компилятора.
Структура произвольного класса С++ - зависит.

Т.е. если мы не хотим зависеть от выбора компилятора - CValue (в теории) нельзя использовать как данные.
Ну, как и указатели на любые другие нетривиальные типы данных.

С другой стороны, оно нам надо - добиваться независимости от компилятора?

Хотя, пожалуй, интерфейсы решают другой вопрос - фиксацию интерфейса и независимость модулей от изменений в других модулях.
В этом плане можно декларировать совместимость только с MSVC/ICL и спокойно использовать CValue и прочие неабстрактные, но фиксированные типы данных.
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #8 - 24. Марта 2008 :: 14:07
Печать  
Если отвязываться от CValue, то сразу вылезают следующие проблемы:
- numeric-тип: должен быть тип, адекватный CNumeric. С произвольным количеством разрядом и без потерь точности в представлении дробных чисел.
- date-тип. В принципе, можно взять из Буста. Хотя вроде бы диапазон дат поддерживает меньший.
- что делать с объектами типа "документ" и "справочник" (и др.)? Промежуточный служебный тип? В принципе, можно, но возникнет оверхед на конвертировании из CValue и обратно.
- агрегатные объекты, которые не являются объектами данных. В принципе, можно их вообще запретить.

В общем, не знаю, стоит ли возня с этими проблемами отвязывания от CValue?...
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Модульность - обмен данными
Ответ #9 - 24. Марта 2008 :: 14:15
Печать  
Может, че-нидь такое забацать? http://www.dtf.ru/articles/read.php?id=44995
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #10 - 24. Марта 2008 :: 14:19
Печать  
kms писал(а) 24. Марта 2008 :: 14:15:
Может, че-нидь такое забацать? http://www.dtf.ru/articles/read.php?id=44995

Если реализовать взаимодействие через обычные экспортные классы, то плагинная подсистема на COM-интерфейсах становится реализуемой в виде некоторого модуля Улыбка, который транслирует вызовы между оберточными классами и COM-интерфейсами Улыбка Просто прямая работа с классами C++ как удобнее выглядит Улыбка
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Модульность - обмен данными
Ответ #11 - 24. Марта 2008 :: 14:28
Печать  
Оу. отличная мысль! Улыбка
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #12 - 24. Марта 2008 :: 14:30
Печать  
Правда, блин, когда прокси-класс строится на shared_ptr (он является своего рода реализацией IUnknown), то временем жизни объекта управлять проще. А вот, что делать, когда он на scoped_ptr или аналоге? Как тогда вернуть объект при помощи метода другого объекта? Временем жизни тогда управлять становится гораздо сложнее. Получается, надо выдирать из Буста не scoped_ptr, а все-таки shared_ptr Улыбка И фиксировать его в качестве "межмодульного стандарта указателя".

Если использовать COM, то тогда все равно получается ограничение на используемые типы данных. Например, нельзя использовать CValue. Как будет, например, происходить маршаллинг для этих объектов? А если все же использовать CValue, то как будет задействоваться CValue в модуле на VB? Как-то выглядит все это так, что COM в силу своей универсальности, сильно ограничивает возможности взаимодействия. Или, как минимум, это взаимодействие усложняет. Т.е., если раньше можно было взаимодействовать "напрямую", то в случае COM понадобится заводить несколько специальных интерфейсов.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Модульность - обмен данными
Ответ #13 - 24. Марта 2008 :: 14:47
Печать  
Ну, для CValue надо будет просто сделать интерфейс. Улыбка
Не очень понятно, удастся ли совместить внешнюю совместимость и эффективность для внутреннего использования.

Цитата:
А вот, что делать, когда он на scoped_ptr или аналоге?

А зачем тебе shared_ptr в COM интерфейсе? Там же AddRef/Release вместо этого будут.
Наверное, придется какой-то специальный тип смартпойнтера придумать?
  

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



Сообщений: 1341
Зарегистрирован: 30. Августа 2006
Пол: Мужской
Re: Модульность - обмен данными
Ответ #14 - 24. Марта 2008 :: 14:52
Печать  
kms писал(а) 24. Марта 2008 :: 14:47:
Ну, для CValue надо будет просто сделать интерфейс. Улыбка
Не очень понятно, удастся ли совместить внешнюю совместимость и эффективность для внутреннего использования.

Вот я и говорю, если полная совместимость с COM-технологией, то будет оверхед по скорости и усложнение взаимодействия. Если все просто и быстро, то несовместимо с COM, но можно в конце концов присобачить специальный модуль-коннектор. Улыбка

kms писал(а) 24. Марта 2008 :: 14:47:
А зачем тебе shared_ptr в COM интерфейсе? Там же AddRef/Release вместо этого будут.
Наверное, придется какой-то специальный тип смартпойнтера придумать?

Это если использовать COM. А если не использовать, то тогда вопрос жизни объекта нужно решать. shared_ptr, ИМХО, вполне на высоте.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать