首先,不确定此处的主题名称。抱歉,它是否与我要问的不完全一致。
我处于一种想法,但是我不知道其中一个比另一个更好的方法,也许我正在丢失一些东西。这是东西:
[目前,我有一个实例A,它创建另一个类B的实例,并使用来自实例B的回调(通过由类A实现的回调类),并使用此回调将类C通知给另一个实例,在A类内部创建并私有。这是一个摘要图:
现在,由于某种原因,将来它是类D的另一个对象,它需要创建并保留类B的对象。问题是,当我有来自以下对象的回调时,仍然需要通知对象C B对象。当然,C实例不能从A迁移到D。因此,从D到我既没有A实例也没有B实例,而且我不知道这样做的最佳方式。这是另一个带有D类的图:
这与第一个图基本相同,除了最后一个调用(notifySomething())是假设的,因为我无法从D类访问C实例。
有人遇到过这种情况吗,解决该问题的最佳方法是什么?
谢谢!
A
和D
具有one作业:执行业务逻辑(在调用其回调方法时)。
考虑到这一点,A
和D
试图执行三个不属于它们的无关任务。其他事情(也许是DI容器)需要承担这些任务的责任。
A
和D
不应该关心如何实例化它们的依赖关系。实例化B
应该由其他负责。创建不是A
或D
的工作。A
和D
不应该在乎谁在调用其回调方法。其他应负责注册A
和D
到B
。注册不是A
或D
的工作。A
和D
不应该关心谁还需要来自B
的通知。将C
注册到B
应该由其他负责。通知不是A
或D
的工作。一种解决方案...
将所有创建,依赖项管理和注册与您的其他对象分开,并将该逻辑放在自己的唯一位置。该位置称为应用程序的composition root,并且其他任何对象都不应尝试执行合成根的工作。
目标是实现dependency inversion。