Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по обработки событий / 14 сообщений из 14, страница 1 из 1
28.05.2004, 14:44
    #32538957
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Сначала кусочек псевдо кода

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
class EventProducer
{
    public event SomeEventHanlder SomeEvent;
    //....
    public  void OnSomeEvent(sender o,  SomeEvent e)
    {
      //...
      if(SomeEvent != null)
      {
            SomeEvent(this, e);
      }
    }
}

class EventConsumer
{
    public void OnSomeEvent(sender o,  SomeEvent e)
    {
       //....
    }
}

Связка их обоих:
    ....
    EventProducer producer = new  EventProducer()
    EventConsumer consumer = new  EventConsumer();
    
    producer.SomeEvent += consumer.OnSomeEvent();
Сдаеться мне что producer без consumer можно создать,
он даже свой евент сгенерит, независимо от наличия отсутствия
consumer-а.
И ето правильно.

А вот consumer : без producer создать то можно,
только зарегестриривать обработчик евент -а негде.
И ето плохо.

Значит мне надо отслеживать создание и возможно убиение всех
producer -ов чтобы consumer -а зарегестрировать.

Что я упустил?
Или надо самому реализовывать то что, вообще говоря должно быть
встроено в язык, что то типа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
class EventManager
{
      private SomeMapImp m_map;
      public register_producer(IProducer prod, EventArgc e)
      {
          // добавит в мап продюсера, если для события 
          // уже есть зарегестрирован (ы) консюмеры 
          // prod.e += consumer.OnEvent 
      }
      public register_consumer(IConsumer cons EventArgc e)
      {
          // добавит в мап консюмер, если для события 
          // уже есть зарегестрирован (ы) консюмеры 
          // prod.e += consumer.OnEvent 
      }
 }    
...
Рейтинг: 0 / 0
28.05.2004, 16:00
    #32539183
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Да, где то в этом направлении и надо рыть.

Текущщая идеология такова, что продьюсеры не знают о существовании консьюмеров, но не наоборот. Если же вам надо освободить консьюмеров от знания продьюсеров, то надо вводить промежуточный "своднический" объект.
...
Рейтинг: 0 / 0
28.05.2004, 16:11
    #32539217
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
>Да, где то в этом направлении и надо рыть.
>Текущщая идеология такова, что продьюсеры не знают о существовании >консьюмеров, но не наоборот. Если же вам надо освободить консьюмеров от знания >продьюсеров, то надо вводить промежуточный "своднический" объект.
Ну наконец то кто то удосужился вникнуть в то что я написал.
Упарился я на www.it-ru.de разжевывать ехпертам C# ЧТО именно я имею ввиду.
Большое спасибо.
...
Рейтинг: 0 / 0
28.05.2004, 17:01
    #32539352
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Не понимаю.
Что значит отвязать консумера от продусера?
Класс который будет ловить события поставляемые другим на него и должен быть изначально ориентирован.
Ну допустим ты их отвязал. Т.е. консумер понятия не имеет о существовании продусера а значит и о его типе а также о сигнатуре евентов. Как в этом случае их корректно связать? Проверять будет тот же сводник? А консумер угадывать кого вообще ловить? ИМХО ненужный гимор.

Или я не прав?


Magnus
...
Рейтинг: 0 / 0
28.05.2004, 18:10
    #32539461
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
>Не понимаю.
>Что значит отвязать консумера от продусера?

Прод'юсеру должно быть пофиг какой консумер и каким именно местом будет обрабатывать ето событие.
...
Рейтинг: 0 / 0
28.05.2004, 18:35
    #32539500
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Ничто не ново под луной

http://www.codeproject.com/csharp/EventPool.asp
...
Рейтинг: 0 / 0
28.05.2004, 18:47
    #32539513
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Магнусу

Ну допустим ты их отвязал. Т.е. консумер понятия не имеет о существовании продусера а значит и о его типе а также о сигнатуре евентов.

Сигнатура ивентов определяется делегатами, а по сему абсолютно не зависит от продусера.
...
Рейтинг: 0 / 0
28.05.2004, 19:43
    #32539571
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Конечно, делегатами, но ведь это то их и связывает. Промежуточный обьект в любом случае будет делат то же самое.
Я понял общую идею. Но стоит ли огород городить?

Magnus
...
Рейтинг: 0 / 0
28.05.2004, 19:58
    #32539583
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
>Конечно, делегатами, но ведь это то их и связывает. Промежуточный обьект в >любом случае будет делат то же самое.
В смысле?
Передавать событие обработчику? Да.
В остальном две большие разницы.

>Я понял общую идею. Но стоит ли огород городить?
Дела вкуса.
...
Рейтинг: 0 / 0
28.05.2004, 20:35
    #32539609
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
Существующее положение дел обязывает разработчика явно делать явною приязку и это не единственный случай, общее обьяснение таково: повышение ошибкоустойчивости.

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


Magnus
...
Рейтинг: 0 / 0
28.05.2004, 21:07
    #32539625
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
>Существующее положение дел обязывает разработчика явно делать явною приязку >и это не единственный случай, общее обьяснение таково: повышение >ошибкоустойчивости.
Ну видимо у нас разное положение дел.
Я предпочитаю классический подход : разделяй и властвуй.
:)



>Просто хочу получше разобаться.
>Можешь провести конкретный в пример в котором использование твоей идеи >целесообразно?
Есть событие "Суши весла" и много других
Есть формочка которое может быть если ее когда нибудь создадут инициирует ето
и другие событыя.
Что именно делать с етим и другими событием вначале не очень понятно.
Кто их будет получать то же.
...
Рейтинг: 0 / 0
28.05.2004, 21:49
    #32539657
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
авторЕсть событие "Суши весла" и много других
Есть формочка которое может быть если ее когда нибудь создадут инициирует ето и другие событыя.
Так вот об этом то я и говорю, ты уже в крайности впадаешь :).
Если уж разделяй и властвуй, то формочка не должна быть ничем большим кроме "рук, глаз и карманов" рабочих классов.
Далее, ты разработчик и не знаешь когда у тебя в про'кте будет вызвана эта форма? Это ж как?
У тебя есть код создающий инстанс формы, после него и бинди обработчики.
Форма то может не знать когда ее создадут, но ведь она поставщик событий и здес проблем никаких. А потребители в точности знают в каких случаях кого вызывать.

Что именно делать с етим и другими событием вначале не очень понятно.
Кто их будет получать то же.
См. выше.
Какой то сумбурный код у тебя получается. :)

Magnus
...
Рейтинг: 0 / 0
31.05.2004, 14:30
    #32541069
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
на:
А вот consumer : без producer создать то можно,
только зарегестриривать обработчик евент -а негде.


а в примере кода, якобы иллюстрирующем эту "нестыковку":
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class EventProducer
{
    //....
}

class EventConsumer
{
   //....
}

// Связка их обоих:
    ....
    EventProducer producer = new  EventProducer()
    EventConsumer consumer = new  EventConsumer();
    
    producer.SomeEvent += consumer.OnSomeEvent();


Сами себе противоречите, уважаемый...
Сначала (после слов "// Связка их обоих:") - делаете многозначительное многоточие, а фактически (подразумевается) - создаете "внешнего хостера" для экземпляров поставщика и потребителя (которые, как вы правильно заметили, могут создаваться абсолютно независимо друг-от-друга), а потом - жалуетесь на то, что "нет места", в котором можно осуществлять независимую привязку/отвязку (на "правильном" жаргоне это называют "подписка"/"отписка" на события) поставщиков/потребителей...

Дык, в том же "внешнем хостере" и делайте все, что вам нужно... Что в этом плохого и где тут может быть логическое противоречие?
...
Рейтинг: 0 / 0
02.06.2004, 02:38
    #32543766
gpu
gpu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по обработки событий
// Связка их обоих:
....
EventProducer producer = new EventProducer()
EventConsumer consumer = new EventConsumer();

producer.SomeEvent += consumer.OnSomeEvent();



>Сами себе противоречите, уважаемый...
> скип
Ну многоточие обозначение многоликое
в данном случае подразумевалось делаем что то другое
>Что в этом плохого
Зависимость между producer и consumer, для меня особо критично
зависимость времени жизни.

Подробнее и по научному на ету тему можно справиться
в книжках или у корифеев дот . нета , если поискать на ету тему.
>и где тут может быть логическое противоречие?
Если оставаться в рамках данной реализации, то его здесь нет.
Если посмотреть модели систем управляемых событиями, то результат очевиден.

На самом деле вопрос можно было (нужно было. Но правильно задать вопрос означает знать ответ наполовину, не так лисформулировать так ли?)
задать так>
Возможно ли встроенными средствами C-sharp или .Нет
получить такую модель, при которой producer мог бы ничего не знать
о consumer-е и наоборот?
Ответ> получить нельзя (хотя если покопать в направлении LSE и System.EnterpriseServices, то кто знает..., но слабо вериться)
, но можно построить самому.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Вопрос по обработки событий / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]