objective-c - 将信息从 A 类委托(delegate)给 B 类再委托(delegate)给 C 类而不是直接从 A 类委托(delegate)给 C 是不是糟糕的编程设计?

标签 objective-c class delegation

我打算制作一个包含钢琴键盘的应用程序。将有一个代表单个键的自定义类,这些键将是另一个自定义类(钢琴类)的 subview 。然后钢琴类的一个实例将被实例化到一个 View Controller 中。

我需要一个按键类,因为当触摸事件发生时,我需要知道按下的是哪个键。当触摸事件实际发生时,该键将通过委托(delegate)通知钢琴它是哪个键,钢琴将通过将相同的信息中继到 View Controller 来响应,也通过委托(delegate)。

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

将信息从钢琴键传递到 View Controller 是糟糕的设计吗?

最佳答案

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

当然,前提是钢琴 View 会为自己创建键 View 。如果您有一个钢琴 View ,其他人必须向其添加键,但随后希望收到键委托(delegate)消息,那么我认为根据需要了解彼此实现细节的参与者的数量,这是一个糟糕的设计。

关于objective-c - 将信息从 A 类委托(delegate)给 B 类再委托(delegate)给 C 类而不是直接从 A 类委托(delegate)给 C 是不是糟糕的编程设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7018801/

相关文章:

Python 私有(private)实例变量行为

objective-c - NSURLSession 委托(delegate) : How to implement my custom SessionDelegate class accordingly?

具有新实例参数的 C++ 11 委托(delegate)构造函数?

objective-c - NSJSONSerialization 是否将数字反序列化为 NSDecimalNumber?

ios - 推送 View 时如何隐藏tabBar?

objective-c - 停止执行并获得用户在 iPad 应用程序上的选择

Java Class.forName 方法 java.lang.ClassNotFoundException;

objective-c - 触摸时更改表格单元格的 UIImage

java - 尝试引用同一包中另一个类中的 SteppingStone5_Recipe 类时,编译器显示 "cannot find symbol"错误消息

java - 如何从抽象类调用主驱动程序中的实例?