События C # по сравнению со службами Pub-Sub WCF / SOA: защита объектов от их подписчиков - PullRequest
1 голос
/ 17 октября 2011

Проведя за последние 2,5 года множество WCF-сервисов и SOA-разработок, включая создание сервисов публикации-подписки на вызов, где один из ключевых принципов заключается в том, что разработчики должны стремиться строить чистые отношения клиент-сервер, где оба клиента не знают овнутренности службы ... они должны знать только, что интерфейс и службы не должны зависеть от конкретных клиентов или подробностей, это заставило меня задуматься о том, как это относится к собственной системе публикации-подписчика C #: обработчикам событий.На самом деле этот вопрос относится к любому сопоставимому языку.

Как я вижу, объекты, которые представляют события и затем вызывают эти события, ничем не отличаются от сервисов pub-sub в мире SOA.По сути, вызов событий в C # like - это «сервис», вызывающий метод одного из зависимых «клиентов».Когда мы создавали сервисы pub-sub в WCF, обратные вызовы к клиентам всегда выполнялись асинхронно (что не позволяло клиенту блокировать сервис), а любые ошибки, возникающие в результате взаимодействия или необработанные исключения на стороне клиента, были изолированы, опять же, чтобы защитить сервис от его клиентов.

Почему в .NET не практикуется также запускать события асинхронно и всегда обрабатывать (и глотать ???) исключения в обработчиках событий?В моем опыте код, где вызывающий событие зависит от успеха обработчика, является плохим дизайном ... вы должны вызывать методы для вещей, от которых вы зависите.Конечно, объекту, выставляющему событие, не важно, сколько времени занимают обработчики, чтобы выполнить свою работу ... или если они даже преуспели?

Обсудить!

1 Ответ

0 голосов
/ 17 октября 2011

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

Прежде всего, простота.Внедрение системы «забей и забудь» делает практически невозможным внедрение в качестве кодера системы реагирования и запуска.Однако внедрение системы реагирования на пожары позволяет легко реализовать систему защиты от пожара.Кроме того, события очень прямолинейны.События - это просто многоадресные делегаты, где только декларирующий класс может их запускать.Ни больше, ни меньше.

Во-вторых, некоторый код в базовой платформе .NET опирается на систему событий в сочетании с системой запуска и реагирования.Например, событие Winforms BeforeExit, которое можно отменить в событии Аргументы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...