Iは、以下のいずれかがサービス指向設計のObjective-Cでは正しい使い方/実装されるであろう思っている: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のさまざまな実装を返すように設定できることを意味します。
私の質問はどのスタイルを選択するのですか、なぜですか?
ありがとうございました。
回答ありがとう@ughoavgfhw。 obj-cは動的言語であるため、サービスプロバイダで必要なものはすべて実行できます。つまり、要求されたサービスのように動作するインスタンスを返すことさえできます。 したがって、isKindOfClass(および関連するメソッド)をオーバーライドして、必要なオブジェクトを返すことができるので、柔軟性はおそらく問題ではありません。 安全上の注意:正確に何を念頭に置いていますか? – Moszi
@Moszi私は、conformsToProtocol:を使うことができるので、柔軟性はプロトコルで簡単だということを意味しました。安全性については、クラスを使用する場合、誰かが不要なクラスを送信するプログラムに何かをロードする可能性があります。あなたの実装で何とかこれをチェックする必要があります。 – ughoavgfhw
ありがとう:) - 私はプロトコルで行く;) – Moszi