【问题标题】:Is it bad programming design to delegate information from Class A to Class B to Class C instead of directly from Class A to C?将信息从 A 类委托给 B 类到 C 类而不是直接从 A 类委托给 C 类是不好的编程设计吗?
【发布时间】:2011-10-24 12:44:53
【问题描述】:

我正计划制作一个包含钢琴键盘的应用。将有一个自定义类代表一个单独的键,键将是另一个自定义类的子视图,钢琴类。然后将钢琴类的一个实例实例化为视图控制器。

我需要一个按键类,因为当触摸事件发生时,我需要知道正在按下哪个键。当触摸事件实际发生时,琴键将通过委托通知钢琴它是哪个琴键,钢琴将通过将相同的信息传递给视图控制器来响应,也通过委托。

我不希望将信息从键直接传递到视图控制器的原因是我不会直接在 vc 中实例化键类的实例,这样会更具可读性以前的方式。

将信息从琴键传递到钢琴到视图控制器的设计是否糟糕?

【问题讨论】:

    标签: objective-c class delegation


    【解决方案1】:

    这根本不是糟糕的设计。假设视图控制器不知道钢琴视图设置自己的方式(包括它添加了一堆子视图来处理其键的事实),这只是根据正确的面向对象设计原则隐藏逻辑的一个示例.所有视图控制器应该知道的是它可以创建一个钢琴视图,并且钢琴视图会告诉它按下了哪些键。在您的实现中,这就是它所知道的全部内容。

    也就是说,当然,假设钢琴视图为自己创建了键视图。如果您有一个钢琴视图,其他人必须向其添加键,但随后又希望接收键委托消息,那么我认为这是一个糟糕的设计,基于需要了解彼此实现细节的参与者数量。

    【讨论】:

      【解决方案2】:

      我不这么认为。特别是在这种情况下,我认为这实际上是一个很好的设计。

      【讨论】:

        【解决方案3】:

        我不确定我是否完全了解您的键 - 钢琴 - 视图控制器设计。但是根据主题。

        还不错。如果 B 保护 A 免受 C 的侵害。这意味着 A 永远不需要了解 C。这包含在面向对象设计的“定律”中,称为 demeter 定律。并不是说它真的是“法律”,而是更多的设计指南。它促进了解耦对象,因此它们只需要知道一些密切相关的对象即可。

        http://en.wikipedia.org/wiki/Law_of_Demeter

        甚至,根据问题使用 A B 和 C 的图表..

        http://www.aspiringcraftsman.com/tag/law-of-demeter/

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 2017-02-05
          • 1970-01-01
          • 1970-01-01
          • 2018-05-07
          • 2020-03-05
          • 1970-01-01
          • 1970-01-01
          • 2023-03-05
          相关资源
          最近更新 更多