OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 23:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Суббота, 05 Март, 2011 12:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
Info21 писал(а):
Коллеги, кто помнит, где было про то, как Store'ы в домене друг друга не знают (кажется, Александр Сергеевич высказывался), сообщите модераторам, чтобы перенести сюда.
В этой теме: viewtopic.php?f=16&t=3296
Вы бы там покликали по кнопке Пожаловаться, офтоп, с укзанаием куда перенести, а то всё я дя я....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 14:25 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Кажется, дошло.

Есть виртуальная общность сторов, используемая в Ex|Internalize, и там эта общность задается явно пользователем вызовами, форвардующими запрос другим сторам ... как их там, эти вызовы, кажись, Stores.Externalize( wr, s ).

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

Поэтому обход Store'ов нужно реализовывать через сообщения.
Придется добавлять пустой метод -- по аналогии с методом Externalize.
А вместо Stores.Externalize будет Stores.ForwardMessage.
Сообщение может быть и приказом "собраться в список", причем можно использовать какой-то предопределенный тип элементов. А имея список, можно их и обойти по одному.

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

То есть нужно добавлять пустой метод и процедуру.

Из-за добавления пустого метода придется всех клиентов перекомпилить, no?


Последний раз редактировалось Info21 Воскресенье, 06 Март, 2011 18:51, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 18:39 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Info21 писал(а):
Из-за добавления пустого метода придется всех клиентов перекомпилить, no?
Да, придётся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 18:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
Info21 писал(а):
Из-за добавления пустого метода придется всех клиентов перекомпилить, no?
Да, придётся.
Может, как-то выкрутиться можно? с какой-нить композицией? кто у нас особо одаренный? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 19:02 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Info21 писал(а):
Может, как-то выкрутиться можно? с какой-нить композицией? кто у нас особо одаренный? :)
Вам же в любом случае во все стандартные сторы надо будет форвардинг добавлять, no? Иначе до ваших объектов просто не дойдёт посланное, если контейнер не перешлёт.
Как вариант, можно попробовать добавить побочную работу стандартному механизму экстернализации: экстернализировать вникуда, а по ходу дела собирать ссылки на участников процесса. Далее разослать всем, кто IS MySpecialStore.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 19:21 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
Info21 писал(а):
Может, как-то выкрутиться можно? с какой-нить композицией? кто у нас особо одаренный? :)
Вам же в любом случае во все стандартные сторы надо будет форвардинг добавлять, no?
Иначе до ваших объектов просто не дойдёт посланное, если контейнер не перешлёт.
Не очевидно.

Сделаем-ка Стор2 LIMITED, а также новый СторX ABSTRACT, и будем свои умные сторы производить от СторХ, который будет всегда обернут в Стор2.
А контейнер будет иметь дело со Стор2, который то, что надо для визуальщины форвардует, а всё новое общение будут СторХ между собой делать.

No?

(Про "вариант" не понял, потом.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 19:36 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2449
Откуда: Россия, Томск
Info21 писал(а):
No?
Вы правы, я малость упустил из виду предмет обсуждения.
Info21 писал(а):
(Про "вариант" не понял, потом.)
Добавляем три строчки в модуль Stores:
1. в глобальный раздел TYPE: ReportStoreProc* = PROCEDURE (s: Store);
2. в глобальный раздел VAR: reportStore*: ReportStoreProc;
3. в конец метода Stores.Writer.WriteStore: IF reportStore # NIL THEN reportStore(x) END;

Создаём собственный тип Files.File, который в NewWriter создаёт экземпляр собственного Files.Writer, который ничего не делает вообще (все методы пустые). Это нужно для того, чтобы экстернализация на самом деле ни в какие файлы ничего не писала.

Далее устанавливаем обработчик в Stores.reportStore, заводим wr: Stores.Writer и вызываем wr.ConnectTo(ourFile); wr.WriteStore(documentRootView). В результате последнего вызова в обработчик Stores.reportStore должны попасть по очереди все сторы документа, причём по одному разу. Внутри обработчика делаем WITH s: MyStore DO s.HandleMyMessage(globalMessageVar) ELSE END. Механизм передачи сообщения можно усовершенствовать, это пока не важно.

Перекомпиляция клиентов Stores не потребуется, так как мы лишь добавили одну переменную и чуть подправили реализацию WriteStore.

No? : ))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 20:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
No? : ))
Да, похоже!
Надо подумать, спасибо!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Воскресенье, 06 Март, 2011 22:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Возможно, возможно...
Решение остроумное, в плане обратной совместимости.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Вторник, 08 Март, 2011 01:26 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Ну вы даёте! Это же очевидно с самого начала было.

А ещё лучше Stores выкинуть и сделать через traverse с "визитёркой".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Четверг, 10 Март, 2011 23:23 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Александр Ильин писал(а):
Добавляем три строчки в модуль Stores:
Мне из общих соображений интересно.

Передача сторами из одной компании друг другу объектов чтения/записи -- это ведь полностью параллельно передаче сообщения.

Понятно (?), что ввод-вывод можно сделать частным случаем сообщения (передавать rd|wr в сообщении).

Или сделать rd|wr расширением сообщения?

Кстати говоря, было бы проще в сценарии А.С.И. переопределять не File, а rd|rw (?).

И тогда мы видим пример, как предоставление не-ABSTRACT типа препятствует расширяемости системы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 11:30 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Спасибо за идею проталкивать сообщение как расширение от rd-wr!

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 12:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Спасибо за идею проталкивать сообщение как расширение от rd-wr!
Только там rd-wr не расширяемые.

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

-------
Мне хотелось еще понять абстракции. Нет ли изящного тут обобщения.
Вероятно, нет, но вдруг.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 13:03 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Илья Ермаков писал(а):
У меня тут как раз проблема в одном многослойном гуе, что сообщения до открытия на экране между слоями не ходят.
Как раз потому, что сообщения ходят только по фреймам виджетов, полагаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 14:08 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну да...

Ух, да, не расширяемые. Дёмажж.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 18:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Кстати, в Dialog.Update можно увидеть интересную схему рассылки уведомлений. По-моему, очень похоже на ситуацию с доменами:

Omnicast перебирает все окна, начиная с dir.First() и у каждого секвенсера окна вызывает хэндлер. В этом хэндлере, секвенсер окна (внимание!) опять перебирает все окна, начиная с dir.First и вызывает хэндлер броадкаста у окна - только в том случае, если окно имеет такой же секвенсер.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 11 Март, 2011 18:54 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Илья Ермаков писал(а):
Дёмажж.
Доммаж?

Файл расширяем, это решает задачу.

Но хочется найти хорошие абстракции, независимо от текущей реализации.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обход Store'ов из одного Domain'а
СообщениеДобавлено: Пятница, 18 Март, 2011 11:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
В качестве заметки:
- механизм выбора варианта DevSelectors требует обхода всех селекторов в тексте
- Оминк решает эту проблему частным порядком


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB