Help us understand the problem. What is going on with this article?

MantleのFMDB用のラッパーライブラリについて

More than 5 years have passed since last update.

MantleのFMDB用のラッパーライブラリがあったので軽く調べてみたメモ。

tanis2000/MTLFMDBAdapter
https://github.com/tanis2000/MTLFMDBAdapter

INSERT文

// The initial model we will write to the database
MTLFMDBMockUser *user = [[MTLFMDBMockUser alloc] init];
user.guid = @"myuniqueid";
user.name = @"John Doe";
user.age = [NSNumber numberWithInt:42];

// Create the INSERT statement
NSString *stmt = [MTLFMDBAdapter insertStatementForModel:user];

// Get the values of the record in a format we can use with FMDB
NSArray *params = [MTLFMDBAdapter columnValues:user];
// Execute our INSERT
[db executeUpdate:stmt withArgumentsInArray:params];

MTLFMDBAdapterクラスのinsertStatementForModel:メソッドでプロパティを文字列にしてinsert文用の文字列にし、バインドする値をMTLFMDBAdapter columnValues:メソッドで値をarrayにしてexecuteしている。

SELECT文

// Read the record we've just written to the database        
NSError *error = nil;
FMResultSet *resultSet = [db executeQuery:@"select * from user"];
if ([resultSet next]) {
    resultUser = [MTLFMDBAdapter modelOfClass:MTLFMDBMockUser.class fromFMResultSet:resultSet error:&error];
}

selectは単純にsql文を書く必要があるがclassを渡せばマッピングしてくれる。ただしNSSetで返る。

まとめ

メリット

  • DictionaryとModelの変換のコードを書かなくていい
  • SQL文を書かなくていいわけではない
    • insert, update, deleteはSQLを書かなくていい
    • selectはおそらくそのまま書いた方が早いからそうしているっぽい
    • SQLとFMDBをわかった上でならその理屈は納得できる
  • FMDBの使い方が指標になるので試行錯誤しなくていい
  • - FMDBを使う初期開発時なら効率的かもしれない

デメリット

  • Mantle自体使うと値を渡す部分が隠蔽化してしまう
  • Mantle自体使うとエンティティがMTLModelを継承しなければいけない
  • 初期開発でない場合に置き換えようとするとCRUD部分に手を加えることになる

参考URL

モデルクラスとNSDictionaryとの相互変換を楽に行えるようにするライブラリMantleを試す
http://safx-dev.blogspot.jp/2013/12/nsdictionarymantle.html

yimajo
株式会社キュリオシティソフトウェアの代表です。iOSアプリを作っています。最近はCombine frameworkガイドブック / RxSwift研究読本などを書いてます。
https://swift.booth.pm/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away