W jaki sposób można najlepiej reprezentować konstrukcje zdarzeń c # .net w diagramie klas UML?

Projektuję system encji / komponentów, w którym problem komunikacji wewnątrz jednostki jest rozwiązywany przez system komunikatów zdarzeń. Komponenty są podzielone na dwie części, jedną w jednostce i rodzaj „encji proxy” w podsystemie, utrzymywanych w synchronizacji przez system typu obserwatora. Próbuję wdrożyć wydarzenia i delegatów.

Próbuję modelować strukturę systemu zdarzeń / wiadomości w mojej aplikacji i mam problemy z delegatami. Obecnie jest to diagram (dołączony) przedstawiający delegata, eventArgs i podmioty w systemie, jednak charakter ich relacji jest reprezentowany tylko jako skojarzenia ogólne. Mam też drugi diagram pokazujący interfejsy systemu. Muszę pokazać zdarzenia, które pojawiają się w tych obiektach, tak jak w przypadku większości złożoności systemu.

Wiem, że potrzebuję również dynamicznych diagramów współpracy i synchronizacji, ale próbuję dowiedzieć się, jakiego rodzaju i ile różnych klas obsługi zdarzeń potrzebuję, a także jak będzie wyglądać struktura dziedziczenia. Chcę dać sobie wybór typów wiadomości, które wiem, że będą ze sobą współpracować. Rozumiem, że mogę wybrać pochodną EventArgs i typ delegata z tych predefiniowanych typów, aby ponownie wykorzystać je przy dynamicznym tworzeniu diagramów i tworzeniu komponentów.

Główną rzeczą, której nie mogę się zorientować, jest modelowanie zdarzenia jako atrybutu lub operacji. Próbowałem użyć klasy asocjacji dla delegata i operacji typu OnSomeEvent () ze stereotypem zdarzenia. Nie podoba mi się to, ponieważ zdarzenie nie jest operacją. Chroniłem metody w kodzie już tą konwencją nazewnictwa On **** (). Podpis delegata, zachowanie multiemisji i wzór obserwatora nie są tak naprawdę uchwycone przez to podejście.

Jaką metodę wykorzystują inni, aby wyrazić te złożone i ściśle powiązane klasy? Celem diagramów jest zarówno dokumentowanie, jak i pełniejsze zrozumienie interfejsów w systemie. Na tym etapie mojego procesu mam nadzieję zamrozić interfejsy i przejść do implementacji samych komponentów.

questionAnswers(2)

yourAnswerToTheQuestion