1

私は、共通の基本クラスを継承する多数のクラスを持つ Objective-C ライブラリを持っていますが、それらは基本クラスの機能を使用していません。(または具体的に言えば、それらはすべて、インターフェイス定義を超えるアプリのコードを持っていません。)

ただし、基本クラスでは、サブクラスから抽出できるインターフェイス情報に基づいて、サブクラスで欠落しているメソッド実装のタスクを実行するというリフレクションを多用しました。これにより、基本的にサブクラスのソース ファイルが、Objective-C コンパイラでコンパイルしてバイナリにリンクできる構成ファイルに変わりました。

また、空のクラスのライブラリは、Objective-C を理解していない私たちのチームの誰かによって書かれています。

だから私は考えています、このコードはにおいがしますか?それとも派手なデザインですか?

編集

サブクラスは本質的に空で、インターフェース宣言のみを持ち、実際のコードはありません。一方、基本クラスはランタイムを利用して、次のようなことを行うための情報を取得します。

  • Objective-C プロパティのイントロスペクションと KVC に基づいて、サブクラスを JSON データにシリアル化し、JSON データから逆シリアル化します。サブクラスには、すべてが正しく入力されていることを確認するためのヒントが含まれている場合があります。
  • サブクラスで呼び出されたメソッドに基づいてサーバーと通信し、自動シリアライズとデシリアライズを行います。

例えば:

@interface CGIDemoRequest : CGIRemoteObject
@property NSString *name;
- (id)hello
@end // This is it. Implementation of this class is empty.

そしてあなたが使うとき:

{
    // ...
    [[CGIRemoteConnection defaultConnection] setAddressPattern:@"http://www.example.com/api/%@.cgi"];
    // ...
    CGIDemoRequest *req = [CGIDemoRequest new];
    req.name = @"John Doe";
    id resp = [req hello];
    // ...
}

この[req hello]呼び出しにより、基本クラスはreqオブジェクトを JSON:にシリアル化{"name": "John Doe"}し、リモート アドレスhttp://www.example.com/api/Hello.cgiに POST し、応答を取得し、応答を逆シリアル化してオブジェクトに戻します。それにresp

4

1 に答える 1