На работе у продукта, который я получаю, есть много «движущихся частей», одна из главных претензий, с которыми я сталкиваюсь, заключается в том, как его архитектура состоит в том, что в десяти разных местах нужно знать, что выбран новый элемент в списке, прямой путь кода должен быть закодирован. Например, в следующем макете.
Form1
|
+-------------------+---------------------+
| | |
Control1 Control2 Control3
| | |
| +-----------+ +----+----+
| | | | |
SelectionList View1 View2 View3 View4
(Реальное приложение, над которым я работаю, имеет больше слоев, чем это для компонентов графического интерфейса ... bleh ...)
Если мы добавим другое представление к любому элементу управления, который зависит от того, какой элемент выбран, Form1 необходимо направить сообщение. Хуже того, если мы добавим различные команды, которые могут быть вызваны для выбранного элемента, из списка выбора или любого из представлений, представления должны быть изменены, чтобы должным образом вызывать действие. Обычно такие действия размещаются в Form1 (и доступны также через опцию главного меню ...)
(Думайте о SelectionList как о списке файлов ...)
Это кажется хрупким и громоздким.
В последнее время я размышлял над идеей создания (или приобретения, если цена правильная) подсистемы в приложении, которую издатели событий (например, команды) и подписчики должны знать только об определении события Аргументы и название события для получения события.
Мои вопросы:
Существует ли коммерческая библиотека с открытым исходным кодом или общедоступная библиотека, которая уже делает это в .Net 3.5? (Я использую C #.) Это должен быть механизм INTRA-APPLICATION. Я уже знаю о интерактивных библиотеках и механизмах, таких как MSMQ и Этот проект Codeplex.
Если у вас есть опыт разработки или использования подобных решений, каких трех основных подводных камней следует избегать?