【问题标题】:How to implement a service oriented architecture in Objective-C?如何在 Objective-C 中实现面向服务的架构?
【发布时间】:2011-01-22 10:26:32
【问题描述】:

我想知道以下哪一项是面向服务设计的 Objective-C 中的正确用法/实现:

第一个版本特定于静态语言,使用协议(接口):

// 
// get the cloud service from our service provider
// 
id<CloudServices> myService = [ServiceProvider serviceWithProtocol:@protocol(CloudServices)];

第二个版本没有使用协议,依赖于 Objective-C 实际上是动态的这一事实:

// 
// get the cloud service from our service provider
// 
CloudServices *myService = [ServiceProvider serviceWithClass:[CloudServices class]];

显然不同之处在于 CloudServices 是一个接口或协议,我们暗示可以将 ServiceProvider 配置为返回 CloudServices 的不同实现。

所以我的问题是选择哪种风格,为什么?
谢谢。

【问题讨论】:

    标签: objective-c software-design


    【解决方案1】:

    这取决于您的服务如何运作。使用类,ServiceProvider 可以在需要时简单地实例化类并对对象执行初始化。使用协议,ServiceProvider 必须知道哪些类可用于服务,这可以防止传递错误类的一些错误。您还可以让一个类实现多个协议,因此可用于对 serviceWithProtocol: 的不同调用。

    短版:使用类会更简单,使用协议会更灵活,可能更安全。

    【讨论】:

    • 感谢@ughoavgfhw 的回答。我只是想知道带有类的版本:由于 obj-c 是一种动态语言,我们真的可以在服务提供者中做任何我们想做的事情,也就是说 - 我们甚至可以返回一个行为类似于所请求的服务的实例。所以灵活性可能不是问题,因为我们可以覆盖 isKindOfClass (和相关方法)并返回我们想要的任何对象。关于安全的注意事项:您到底想到了什么?
    • @Moszi 我的意思是协议的灵活性更容易,因为您可以使用conformsToProtocol:。至于安全性,如果您使用类,有人可能会将某些内容加载到您的程序中,从而发送不需要的类。你必须在你的实现中以某种方式检查这一点。
    猜你喜欢
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    相关资源
    最近更新 更多