Couchbase Lite beta 1.0 では、リレーションシップが組めて面白い。
いま、ごちゃごちゃと触って記事をまとめているのですが、面白かったからこれだけ先に書きたい。
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年位前に聞きましたが、こうやってサクッとリレーションが組めるように成って来ているのはいい流れですね。
ドキュメントの構成も考えやすくなるね。