信号和插槽可以增加耦合

问题描述:

好的,所以信号和插槽允许对象和方法与另一个对象及其方法之间的松散耦合连接。这很好,但这些信号插槽对象作为父类的公共成员而存在,因此它们的暴露破坏了松耦合以创建紧密耦合的代码。这是一个负面的事情。不应该让信号变得私人,所以父类处理信号的连接/断开?信号和插槽可以增加耦合

好,东西需要知道,当eventFoo发生在ObjectA,要调用handlerBarObjectB需求。

在最简单的免授权实现中,该责任在ObjectA上,该代码在其eventFoo正文中调用ObjectB->handlerBar。这要求它知道ObjectB,并知道ObjectB->handlerBar是正确的。相反,ObjectB并不需要知道约ObjectA

在使用信号和插槽的一种方法中,责任在ObjectB。它负责将其handlerBar注册为eventFoo信号的处理程序。所以它需要知道约ObjectA,但ObjectA不需要知道约ObjectB

在另一种方法中,ObjectBhandlerBar作为插槽公开,其他代码将eventFoo连接到handlerBar。 “其他代码”需要知道ObjectAObjectB,但都不需要知道其他代码。

所以当有人谈论信号和插槽减少耦合时,它们意味着事件生成对象和事件处理对象不再彼此明确耦合,因为它们的职责之一是维护那耦合。相反,耦合是由独立的一段代码执行的,该代码负责耦合,并且独立于对象的其余接口。

现在,您提到了“父级”,这让我认为您正在考虑的是其中一个级别已与其他耦合的情况。在这种情况下,公共信号和时隙在减少耦合方面并不是什么好处。

+0

感谢您的回答。第二段是我最喜欢的方法。 关于父类,我的意思是包含信号对象的类。我相信信号对象应该是私有的,就像任何类成员变量一样。 – Musky 2014-10-31 10:58:06

+0

而不是一个耦合到对象的对象,需要提供一段耦合代码。 – Musky 2014-11-14 15:03:41