我经常遇到一种情况,我必须决定在哪里订阅内部对象的事件?
例如,我有一个对象模型如下所示:
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 图的东西:
我的项目的现有代码的结构具有存在此类对象模型的位置(它具有订阅如上例中实现的事件的位置 - CBASomeEvent+= )。我不喜欢它,想改变它。我想从你这里得到关于这种情况的最佳实践。
另一种方法是在classB、classC、classD中复制classA的所有事件。然后将所有对事件的订阅替换为ONE PLACE(我的意思是,在 B 类中,我们将订阅/取消订阅 A 类对象的所有事件。在 C 类中,我们将订阅/取消订阅 B 类对象的所有事件。所以on...) 在这种情况下,所有订阅和取消订阅都将集中在一个地方。希望,你明白我在这里的意思。
再次,请依靠您的知识和经验告诉我们如何解决这种情况。
更新
您是否同意我的订阅和取消订阅事件必须放在一个地方?请也回答这个附加问题。
提前致谢。