【问题标题】:Signals and Slots Can Increase Coupling信号和插槽可以增加耦合
【发布时间】:2014-10-31 10:37:51
【问题描述】:

好的,所以信号和槽允许一个对象和方法与另一个对象及其方法之间的松散耦合连接。这很好,但这些信号槽对象作为父类的公共成员存在,因此它们的暴露破坏了松散耦合以创建紧密耦合的代码。这是相当消极的事情。不应该将信号设为私有,以便父类处理信号的连接/断开连接吗?

【问题讨论】:

    标签: signals coupling slots


    【解决方案1】:

    嗯,某事需要知道,当eventFoo 发生在ObjectA 上时,需要调用ObjectB 上的handlerBar

    在最简单的无委托实现中,该责任由ObjectA 负责,它在其eventFoo 主体中调用ObjectB->handlerBar。这要求它知道ObjectB,并且知道ObjectB->handlerBar 是正确的调用方式。相比之下,ObjectB 不需要知道ObjectA

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

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

    因此,当有人谈到减少耦合的信号和槽时,他们的意思是事件生成对象和事件处理对象不再显式地相互耦合,因为他们的职责之一是维护耦合。相反,耦合是由一段独立的代码来执行的,该代码负责耦合,并且独立于对象的其余接口。

    现在,您提到了“父类”,这让我认为您是在考虑其中一个类已经与另一个类耦合的情况。在这种情况下,就减少耦合而言,公共信号和插槽并没有什么好处。

    【讨论】:

    • 感谢您的回答。第二段是我最喜欢的方法。关于父类,我的意思是包含信号对象的类。我相信信号对象应该像任何类成员变量一样是私有的。
    • 因此需要提供一段耦合代码,而不是一个对象与对象的耦合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-13
    • 2013-02-02
    • 1970-01-01
    • 2022-08-03
    • 2019-04-20
    • 2013-11-13
    • 2012-10-15
    相关资源
    最近更新 更多