在我目前的情况下,有一个服务提供商(可以与xml解析器通信或进行一些网络通信)以及可以要求服务提供商异步执行其某些任务的客户端.在这种情况下,当服务提供商完成处理时,它必须将结果与客户端进行通信.
我试图找到一种模式或经验法则来实现这种事情,我看到3种可能的解决方案:
1.使用委托模式:客户端是服务提供商的委托,它将在任务完成后收到结果.
2.使用目标/ *** 作方法:客户机要求服务提供商执行一个任务,并传递一个选择器,一旦完成任务,就必须由服务提供商调用该选择器.
3.使用通知.
(更新)经过一段时间的尝试解决方案#2(目标和动作)后,我得出结论,在我的情况下,最好使用代理方法(#1).以下是每个选项的优缺点,就像我看到的那样:
授权方式:
> 1()选项1的优点是我们可以检查编译时错误,因为客户端必须实现服务提供者的委托协议.
> 1( – )这也是一个缺点,因为它使客户端与服务提供商紧密耦合,因为它必须实现其委托协议.
> 1()它允许程序员轻松地浏览代码,并找到服务提供商正在调用哪些方法传递其结果.
> 1( – )从客户端的角度来看,服务提供商一旦得到结果就不会容易找到哪种方法被调用.它仍然很容易,只是去委托协议方法,就是这样,但是#2的方法更直接.
> 1( – )我们必须写更多的代码:定义委托协议并实现它.
> 1( – )此外,应该使用委托模式来确定行为.这种情况在语义上不会是一个确切的授权情况.
行动/目标方法
> 2()选项2的上限是当正在调用服务提供者方法时,也必须指定@selector指定回调 *** 作,因此程序员知道将调用哪个方法来处理结果.
> 2( – )与此相反,很难找到在浏览服务提供商代码时将在客户端中调用哪种方法.程序员必须去服务调用,看看哪个@selector被传递.
> 2()这是一个更动态的解决方案,并且导致部件之间的耦合较少.
> 2( – )也许是最重要的事情之一:它可能导致运行时错误和副作用,因为客户端可以将不存在的选择器传递给服务提供商.
> 2( – )使用简单而标准的方法(#performSelector:withArgument:withArgument :),服务提供者只能传递最多2个参数.
声明:
>我不会选择通知,因为我认为当多个对象需要更新时,应该使用它们.此外,在这种情况下,我想直接告诉委托/目标对象在构建结果后该做什么.
结论:在这一点上,我会选择代理机制.这种方法提供了更多的安全性,并允许轻松浏览代码来跟踪发送代理服务提供者 *** 作的结果的后果.关于这个解决方案的消极方面是:它是一个更为静态的解决方案,我们需要编写更多的代码(协议相关的东西),并且在语义上,我们并不是在谈论真正的授权,因为服务提供者不会委派任何东西.
我错过了什么吗?你推荐什么和为什么?
谢谢!
解决方法 你错过了第三个选项 – 通知.您可以让客户端观察来自服务提供商的通知,指示它有新的数据可用.当客户端收到此通知时,它可以从服务提供商处消耗数据.
这允许良好的松耦合;一些决定只是因为你是否想要推/拉系统.
@H_403_63@ 总结以上是内存溢出为你收集整理的iphone – Objective-c异步通信:目标/动作或授权模式?全部内容,希望文章能够帮你解决iphone – Objective-c异步通信:目标/动作或授权模式?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)