概要
RealmSwift を扱う場合にモデルと CRUD 操作をどこに書くのがいいかなと悩んでいます 個人的にはシンプルに使いたいところで使う方式が一番しっくり来たので備忘録として残しておきます
環境
- macOS 11.5
- Xcode 12.5.1
モデルだけ定義する
Realm の基本的な使い方としてモデルを定義すると思うのですがそのモデル内では余計なことはしないようにします
単純にモデルだけを定義します
import RealmSwift
class BoardConfig: Object {
@objc dynamic var name: String = ""
@objc dynamic var point: Int = 0
}
View 側でモデルを使う
データの保存が取得は基本的に UIViewController などで行います
view 側にも import RealmSwift
が必要でかつデータにアクセスするために Realm()
オブジェクトを生成する必要がありますが余計なことを考えなくて済むのでこの方法がベストだと思います
class BoardConfigViewController: UIViewController {
override func viewDidLoad() {
// データの保存
let config = BoardConfig()
config.name = "board1"
config.point = 20
let realm = try! Realm()
try! realm.write {
realm.add(config)
}
// データの取得
let configs = realm.objects(BoardConfig.self)
for config in configs {
print(config)
}
}
}
上記では viewDidLoad で行っていますが Realm へのアクセスが必要な箇所で上記を呼び出す感じになります
Realm のオブジェクトを毎回生成するとあれなので Realm のオブジェクトはメンバー変数として扱っても良いかなと思います
アンチパターンっぽい書き方は
過去にモデルのクラスにデータを保存するメソッドやデータを取得するメソッドを作成していたのですがそれだとモデルを view 側でも扱うしモデル側でも扱う必要がありコードが重複している感がありました
CRUD 処理をまとめるという意味では良かったかもしれないのですがデータの変換などを考えると結局コードがごちゃごちゃするので微妙かなと思った感じです
モデルはあくまでもモデルでそれを view 側で変換したりするほうが結果的にキレイにコードになる印象です
最後に
結局シンプルなのが一番です
0 件のコメント:
コメントを投稿