Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Тестируем: Добавление контекстов (число прочтений - 8047 )
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Тестируем: Добавление контекстов
25. Августа 2008 :: 20:23
Печать  
Итак, по следам полосатого слона:

http://www.1cpp.ru/forum/YaBB.pl?num=1219216486/18#18
http://www.1cpp.ru/forum/YaBB.pl?num=1219421843/1#1

Если будет желание, можно потестировать немного другой подход - вариант с объединением контекстов.

Это не ООП, хотя в первом приближении добавление контекста можно рассматривать как добавление базового класса (с точки зрения основного контекста).
Однако из метода добавленного контекста доступ ограничен исключительно самим добавленным контекстом.
Кроме того, нет никакой навигации по иерархии добавленных контекстов - при разрешении конфликтов имен приоритет всегда имеет контекст, добавленный ранее.
Диагностики конфликтов пока нет, приоритеты работают молча.

Я бы сказал, что это, скорее, реализация концепции примесей или стратегий.

Что мне интересно:
1. Нужно ли это кому-либо?
2. Если нужно, то для чего?
3. Насколько текущая реализация стабильна. Падает? Нет? При каких условиях?
4. Отрицательные стороны такого механизма. В чем они? Хотелось бы помоделировать и порассуждать.

P.S.
Описание:
Ко всем групповым контекстам добавлен метод __ДобавитьКонтекст(__конт); доступ осуществляется через "Сам()", т.е. через контекст.
1cpp.dll нужно положить в каталог бд, а обработку можно посмотреть.
вот, вроде бы, и все. Улыбка
  

addcontext.rar ( 554 KB | Загрузки )

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #1 - 25. Августа 2008 :: 21:34
Печать  
Тест скомпилирован на базе последних исходников icpp?
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #2 - 26. Августа 2008 :: 03:10
Печать  
И почему же этот вариант не в спец. ветке в репозитарии ? Печаль
  

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: Тестируем: Добавление контекстов
Ответ #3 - 26. Августа 2008 :: 05:49
Печать  
Arta писал(а) 25. Августа 2008 :: 21:34:
Тест скомпилирован на базе последних исходников icpp?

Есессно.
Если не использовать добавленный метод контекстов - это обычный trunk icpp.

artbear писал(а) 26. Августа 2008 :: 03:10:
И почему же этот вариант не в спец. ветке в репозитарии ? Печаль

А почему он должен быть там? Никто пока не просил ветку добавить Улыбка

P.S.
Там очень простая реализация.
Нам сейчас надо оценить безопасность модели.
  

gcboost.h ( 11 KB | Загрузки )

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #4 - 26. Августа 2008 :: 06:15
Печать  
Да, посмотрел, вроде нормально, но нужно потестить на юнит-тестах.
Ты проверял добавление контекста, затем прямое редактирование в ТП - остаются ли добавленные контексты?

Пока что я предлагаю
1. Добавляем Контекст::__ДобавитьСвойство(Имя)
оно у меня уже протестировано.
2. Добавляем Контекст::__ДобавитьКонтекст(Конт)
Думаю, что два этих метода вполне могут существовать вместе/независимо как 2 разных подхода работы.

3. Выпускаем релиз 3.0.1.16
тем более, что у меня еще одна нужная фича для Перехватчика реализовалась - http://www.1cpp.ru/bugs/show_bug.cgi?id=4097

4. Тестируем сборку, готовим доку, закрываем старые баги.
5. Через пару недель выпускаем уже окончательный релиз 3.1

Мне лично не хочется ждать пару недель до выпуска релиза 3.1 и только потом начинать юзать методы из пп.1 и 2. Не настолько уж они критичны Улыбка

Что скажешь?
  

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: Тестируем: Добавление контекстов
Ответ #5 - 26. Августа 2008 :: 06:30
Печать  
artbear писал(а) 26. Августа 2008 :: 06:15:
Да, посмотрел, вроде нормально, но нужно потестить на юнит-тестах.
Ты проверял добавление контекста, затем прямое редактирование в ТП - остаются ли добавленные контексты?

Т.е. у тебя в прямом редактировании ТП будет вызвано CGroupContext::Accept, ТурбоБЛ обновит данные контекста, а твои добавленные контексты пропадут Печаль
Т.е. ИМХО код из вызова метода
Код
Выбрать все
std::vector<CBLPtr<CBLContext> > vc;
std::swap(vc, m_AddedCtx);
pGroupCont->Accept();
std::swap(vc, m_AddedCtx); 


нужно встраивать непосредственно в перехваченный в ТурбоБЛ CGroupContext::Accept !
  

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: Тестируем: Добавление контекстов
Ответ #6 - 26. Августа 2008 :: 09:01
Печать  
artbear писал(а) 26. Августа 2008 :: 06:30:
нужно встраивать непосредственно в перехваченный в ТурбоБЛ CGroupContext::Accept !

Я знаю.
И еще кое-что по-мелочи.

Здесь мне больше интересно пообсуждать идею, а не реализацию.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #7 - 26. Августа 2008 :: 09:10
Печать  
ИМХО при добавлении контекста было бы удобно передавать некий флаг, регулирующий проверку совпадающих свойств и методов у исходного контекста и добавляемого.
Типа если Флаг = 1 (разработка), то происходит анализ совпадения и выдаются ошибки в окно сообщений
Если Флаг = 0 (боевая база), то нет никаких проверок, все тупо и быстро.

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

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: Тестируем: Добавление контекстов
Ответ #8 - 26. Августа 2008 :: 09:14
Печать  
И что за проблема с АссоциативнымВектором ?
  

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: Тестируем: Добавление контекстов
Ответ #9 - 26. Августа 2008 :: 09:23
Печать  
artbear писал(а) 26. Августа 2008 :: 06:15:
...
3. Выпускаем релиз 3.0.1.16
тем более, что у меня еще одна нужная фича для Перехватчика реализовалась - http://www.1cpp.ru/bugs/show_bug.cgi?id=4097
...
Что скажешь?

http://www.1cpp.ru/forum/YaBB.pl?num=1219421843/19#19

Артур, надо учиться выпускать релизы.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #10 - 26. Августа 2008 :: 11:10
Печать  
artbear писал(а) 26. Августа 2008 :: 09:14:
И что за проблема с АссоциативнымВектором ?

ДА, тут интересный прикол - эта коллекция добавляется, в списке свойств вроде как добавленные элементы появляются, хотя вроде как не должны Улыбка
правда, обращение к ним через контекст роняет 1С Печаль
  

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: Тестируем: Добавление контекстов
Ответ #11 - 26. Августа 2008 :: 20:42
Печать  
artbear писал(а) 26. Августа 2008 :: 11:10:
artbear писал(а) 26. Августа 2008 :: 09:14:
И что за проблема с АссоциативнымВектором ?

ДА, тут интересный прикол - эта коллекция добавляется, в списке свойств вроде как добавленные элементы появляются, хотя вроде как не должны Улыбка
правда, обращение к ним через контекст роняет 1С Печаль

Потом расскажу.
...
Лана, щас расскажу. Улыбка

Ну, вкратце - я могу сделать точно такую же безопасную коллекцию, но из-за реализации контекстов в 1С доступ по имени свойства будет иметь сложность O(N).
Потому что в итоге приходится находить по имени не просто пару "ключ, значение", а ее номер в коллекции, а это - O(N).
Поэтому использован некий хак, который позволяет решить эту задачу со сложностью const.
Но чем-то приходится жертвовать - и в данном случае - это жестко регламентированный протокол использования методов контекста.

Для ассоциативного вектора нельзя кешировать номера свойств.
Можно только искать свойства через FindProp, а после получать значения через возвращенный дескриптор (а не номер) свойства.
Это прекрасно работает в родном окружении 1С.
Но вот добавить такой контекст через TurboBL увы, не получится.

Да и не велика потеря.
Я только сейчас заметил, что и добавление структуры у меня в Тест2() работает неверно (ну или "весьма своеобразно").
Свойства-то структуры к контексту добавляются, но только те, которые были добавлены к контексту до добавления контекста структуры.
Но вот дальнейшая вставка свойств уже в контексте не отображается.
Например, нельзя получить свойство структуры "Десять" через контекст.
По крайней мере, до тех пор, пока не будет вызван очередной Accept().

Т.е. добавление полиморфных контекстов к ГК не имеет смысла.
Все равно TurboBL не заточена под поддержку таких контекстов в соединении с ГК.

А вот добавлять что-то статическое, типа первого теста - это должно работать.
Можно даже придумать, когда это действительно будет нужно. Улыбка

P.S.
Я так и знал, что добавление контекстов - это очередной ящик Пандоры... Улыбка
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Тестируем: Добавление контекстов
Ответ #12 - 27. Августа 2008 :: 03:47
Печать  
Михаил, а ты на тестах 1С++, похоже, что не проверял Печаль
Падают тесты ТурбоБЛ - например, вызов методов контекста с параметрами по умолчанию.
  

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: Тестируем: Добавление контекстов
Ответ #13 - 27. Августа 2008 :: 03:50
Печать  
artbear писал(а) 27. Августа 2008 :: 03:47:
Михаил, а ты на тестах 1С++, похоже, что не проверял Печаль
Падают тесты ТурбоБЛ - например, вызов методов контекста с параметрами по умолчанию.

Исправил.
  

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: Тестируем: Добавление контекстов
Ответ #14 - 27. Августа 2008 :: 05:59
Печать  
Обновил доку + примеры использования
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать