【问题标题】:Design patterns: exposing notifications using a protocol设计模式:使用协议公开通知
【发布时间】:2023-04-11 11:27:01
【问题描述】:
我有几种类型的逻辑控制器类来处理与远程资源的通信。为此,每个类都使用一个处理连接细节的网络控制器类的实例:连接到资源、发送数据、接收数据。使用通知将网络控制器类的数据更改通知逻辑控制器类。因此,在我当前的解决方案中,每个逻辑控制器类都会注册通知并实现特定功能以不同方式处理它们。
但是,如果我想做适当的代码工程,我想知道使用 protocols 和 delegation 是否会更健壮。
我想知道我是否可以定义逻辑控制器类需要实现哪些方法才能接收通知。但是我不确定这是否有意义和正确,因为我不想在这里继承。
有什么建议吗?
【问题讨论】:
标签:
ios
objective-c
design-patterns
network-programming
【解决方案1】:
通常,每个通知有 1 或 2 个(稍后解释)方法。所以这是一个非常简单的映射。这样做的原因是每个“事件”都有一个通知,几乎没有理由去委托。
但是你的设计很好。委托和通知有什么区别? (鲁棒性不是。)
委托是一个单个实例,用于自定义委托实例的行为。因此,除了通常的“通知”方法(@987654321@、did…)之外,它还可以改变委托的行为,即。 e.返回NO 作为“无效标记”(should…)或更改数据集,执行操作。 (有时这是事件的第二种方法。)很明显,在这种情况下,您一次不能有多个实例。委托与子类竞争,通常是更好的选择(白盒与黑盒)。
您可以拥有任意数量的通知接收器。显然他们不能改变通知发送者的行为。因此,如果您有多个实例只需要事件发生的信息,那么它是更好的选择。
如果正确理解您的用例,通知将完全符合您的要求。