3

次のうちどれが、サービス指向設計の Objective-C での正しい使用法/実装になるのだろうかと思っています。

最初のバージョンは、プロトコル (インターフェース) を使用する静的言語に固有のものです。

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

2 番目のバージョンはプロトコルを使用せず、Objective-C が実際に動的であるという事実に依存しています。

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

明らかに違いは、CloudServices がインターフェースまたはプロトコルであることであり、CloudServices のさまざまな実装を返すように ServiceProvider を構成できることを意味します。

だから私の質問は、どのスタイルを選ぶべきか、そしてその理由は?
ありがとう。

4

1 に答える 1

1

サービスの仕組みによって異なります。クラスを使用すると、ServiceProvider は必要に応じてクラスをインスタンス化し、オブジェクトの初期化を実行できます。プロトコルを使用して、ServiceProvider は、サービスで使用できるクラスを認識している必要があります。これにより、間違ったクラスを渡すことによるバグを防ぐことができます。1 つのクラスに複数のプロトコルを実装して、serviceWithProtocol: へのさまざまな呼び出しに使用することもできます。

短いバージョン: クラスを使用するとより簡単になり、プロトコルを使用するとより柔軟になり、安全になる可能性があります。

于 2011-01-22T02:26:32.667 に答える