Entries

Objective-Cでバッチ処理をするライブラリAAMCommandKit作りました

「第1回 iPhone_dev_jp みんなが幸せになるハッカソン」の僕の成果物として、AAMCommandKitを公開しました。ObjectiveC用のCommandパターンライブラリです。

Commandライブラリって?
セレクターやブロック、あるいは一連の処理などを、”◯◯Command”という1つのクラスにカプセル化したものです。Commandをallocして、executeをコールするだけで様々な処理を実行できます。

Commandライブラリの強力なところは、複数のコマンドを配列にれて、まとめてバッチ処理したり、非同期に並行実行したりできる点です。元々は僕がFlash案件でつかっていたライブラリで、複雑なアニメーションや遷移と、裏側で行う処理を綺麗に記述する為に作りました。

どんなことができるの?
例えば、下記のようなメンドクサイ処理をシンプルに記述できます。

  • “Start”を表示し、
  • 0.5秒待機し、
  • [self doSomething]をコールし、
  • アニメーションをし、
  • “End!”を表示する

このようなdelegateが飛び交いそうなメンドクサイ実装が、下のようにスッキリ書くことができちゃいます。

コード


//処理を配列に登録
NSArray *ar = @[
    [AAMLogCommand commandWithString:@"Start!"],
    [AAMWaitCommand commandWithDuration:0.5],
    [AAMSelectorCommand commandWithTarget:self selector:@selector(doSomething)],
    [AAMAnimationCommand animationWithDuration:1 block:^(void){
      view.frame = CGPoint(320,240);
    }],
    [AAMLogCommand commandWithString:@"End!"]
];

//バッチで実行
AAMSerialCommand *c = [AAMSerialCommand commandWithCommands:ar];
c.delegate = self;
[c execute];



コマンドライブラリは、AAMCommandを拡張することで簡単に自分コマンドを作れます。

iPhoneやFlashのようなインタラクティブ性の高いアプリでは、演出や遷移の為のdelegateやcallbackでコードがグチャグチャになってしまう傾向があります。
LoadingCommandとかInitializeCommandとか、さまざまなメンドクサイ処理をカプセル化してしまえば、色々なことがシンプルにできるようになるんじゃないかと。

まだまだ生まれたばっかですので、バグだし、拡張、フィードバック、色々大募集です。お気軽にTwitterなどで捕まえてくださいまし。