Чтобы лучше объяснить мой ответ, рассмотрим следующий пример:
- Приложение Prism содержит
ModuleX
и ModuleY
EventA
и EventB
определены где-то, где оба модуля могут получить к ним доступ.
ModuleX
содержит обработчики обоих событий.
ModuleY
запускает эти события.
Также рассмотрите следующие аспекты SOLID
(из Википедии)
Принцип единой ответственности: класс должен иметь только одну ответственность (т. е. только одно потенциальное изменение в спецификации программного обеспечения должно иметь возможность повлиять на спецификацию класса).
Принцип разделения интерфейсов: «множество клиентских интерфейсов лучше, чем один интерфейс общего назначения».[4]
Требования к функциональности, которую вы описываете при сопоставлении с этим примером, будут следующими:
- Зарегистрировать обработчик для события A
- Зарегистрировать обработчик для события B
- Обработать событие А
- Обработать событие B
Если у вас есть один класс, который обрабатывает как A, так и B, вы нарушаете принцип единой ответственности. Если вы зарегистрируете обработчик событий с обработчиком, определенным в том же классе, вы также нарушите принцип единой ответственности.
И что теперь? Если все разделить, получится четыре класса, поскольку это, по-видимому, разные обязанности. Согласно Википедии принцип SOLID существует для упрощения расширения и изменения существующего кода; поэтому он должен быть там, чтобы сделать вашу жизнь проще, а не сложнее.
Если мы создадим четыре класса, мы будем вынуждены открыть код обработчика событий для области вне класса, в котором он был создан. По моему скромному мнению, было бы лучше сохранить код обработки событий, а также регистрацию в наименьший возможный объем:
class MyHandler
{
public MyHandler(IEventAggregator eventAggregator)
{
eventAggregator.GetEvent<EventA>().Register(HandleEventA);
}
private void HandleEventA(EventArgs args)
{
}
}
MyHandler
теперь отвечает за обработку EventA
. Несмотря на то, что он также регистрирует обработчик; можно по-прежнему рассматривать это как часть обработчика событий.
person
Bas
schedule
28.04.2014