コンテンツへスキップ

Couchbase Lite beta 1.0 では、リレーションシップが組めて面白い。

2013年11月25日

いま、ごちゃごちゃと触って記事をまとめているのですが、面白かったからこれだけ先に書きたい。

Couchbase LiteのベータがCouchbaseから配布されています。

以前、Couchbase Meet Up で発表をしたのですが、その時からパワーアップしていました。

ほんでちょいちょい触ってみたのですが、CBLModelを利用したリレーションシップが面白い!

そもそも、前回発表した時は、ドキュメント自体はModelを利用せず、NSDictionaryを利用して使っていました。
しかし、CBLModelを利用すれば、

@interface ShoppingItem : CBLModel

@property BOOL      check;
@property (nonatomic, copy)    NSString *type;
@property (nonatomic, copy)    NSString *text;
@property (nonatomic, copy)    NSDictionary *dictionary;
@property (nonatomic, copy)    NSArray *array;
@property (nonatomic, strong)  NSDate *created_at;

@end

@implementation ShoppingItem

@dynamic type, check, text, created_at, dictionary, array;

@end

とすれば、簡単にモデル化でき、あとはこのモデルを初期化して、値を入れてセーブすれば保存が完了します。
以下のように

    // カラのmodelを作成
    ShoppingItem *item = [[ShoppingItem alloc] initWithNewDocumentInDatabase:ap.database];
    
    // プロパティに各種値を入れる
    item.type = @"spItem";
    item.text = numberStr;
    item.check = NO;
    item.created_at = [NSDate date];
    item.dictionary = @{@"key": @"value",
                        @"key2":@"value2"};
    item.array      = @[@"obj1",@"obj2",@"obj3",@"obj4",@"obj5"];
    
    // Save
    NSError *error;
    BOOL ok = [item save:&error];

NSDictionaryで管理するよりめっちゃ簡単。CBLModelを利用すれば、NSDataだって、かってにbase64化してくれるので画像保存もできます。

そして面白いのが、リレーションシップを組めるということです!

新たに別のモデル、ShoppingItemHoldというモデルを作成します。
これは、上記のShoppingItemというモデルに一つだけBoolを追加したものとします。

その場合、以下のように宣言します。

@class ShoppingItem;

@interface ShoppingItemHold : CBLModel

@property (nonatomic, copy) NSString *type;
@property (assign)          ShoppingItem *item;
@property                   BOOL hold;

@end

@implementation ShoppingItemHold
@dynamic type, item, hold;
@end

先ほど作ったModelをそのまんまプロパティとして宣言します(ここはassignのほうが良いと公式でありました)
そうすると、同期先(CouchDBとか)では、その対象となるDocumentIDが保存され、Xcodeプロジェクト内では、そのIDのShoppingItemが勝手に生成されます。

以前NSDictionaryで組んでいた自分としては衝撃的です。だってすんごいめんどくさかったんだもん。
それをたったこれだけで解決できるなんて…。なんていいやつなんだ!

NoSQL、とくにCouchbaseはリレーションが組みにくいって話を1年位前に聞きましたが、こうやってサクッとリレーションが組めるように成って来ているのはいい流れですね。
ドキュメントの構成も考えやすくなるね。

コメントする

コメントを残す