Где подписаться на события внутреннего объекта?
Я часто сталкиваюсь с ситуацией, когда я должен решить, где подписаться на события внутреннего объекта?
Например, у меня объектная модель выглядит так:
class ClassA
{
public event EventHandler SomeEvent1;
public event EventHandler SomeEvent2;
public event EventHandler SomeEvent3;
public event EventHandler SomeEvent4;
}
class ClassB
{
private ClassA a;
public ClassA A
{
get
{
return this.a;
}
}
public ClassB()
{
this.a = new ClassA();
// here subscribe to some events (for example, SomeEvent1 and SomeEvent2)
// this.a.SomeEvent1 += OnSomeEvent1Raised;
// this.a.SomeEvent2 += OnSomeEvent2Raised;
}
}
class ClassC
{
public ClassB B { get; }
}
class ClassD
{
public ClassC C { get; }
public void SomeMethod()
{
// Here subscribe to another ones events of object C.B.A. For example:
C.B.A.SomeEvent3 += OnSomeEvent3Raised;
C.B.A.SomeEvent4 += OnSomeEvent4Raised;
}
private void OnSomeEvent4Raised(object sender, EventArgs e)
{
throw new NotImplementedException();
}
private void OnSomeEvent3Raised(object sender, EventArgs e)
{
throw new NotImplementedException();
}
}
мы пытались создать что-то вроде диаграммы UML:
Структура существующего кода моего проекта имеет места, где существует такая объектная модель (есть места, где подписка на события реализована, как в примере выше - C.B.A.SomeEvent + =). Я неМне это нравится, и я хочу это изменить. Я хочу здесь от вас лучшие практики об этой ситуации.
Альтернативный подход заключается в дублировании всех событий класса A в classB, classC, classD. А затем заменить все подписки на событияОДНО МЕСТО (Я имею в виду, что в классе B мы будем подписываться / отписываться на все события объекта ClassA. В классе C мы будем подписываться / отписываться на все события объекта класса B. И так далее ...) В этом случае все подписки и отписки будут в одном месте. Надеюсь, вы понимаете, что я имею в виду здесь.
Опять же, пожалуйста, положитесь на свои знания и опыт, и мы расскажем, как решить эту ситуацию.
ОБНОВИТЬ
Согласны ли вы со мной, что подписки и отписки на события должны быть размещены в одном месте? Пожалуйста, ответьте и на этот дополнительный вопрос.
Заранее спасибо.