はじめに
Realmの初期化処理をAppDelegateに置いていたのですが、できる限りimportは局所的にしていきたいところです。特にCocoaPodsで入れた類のものは必要なところだけで使っていきたい。
というわけで、Realmの初期化処理をAppDelegateからも追い出していきます。
切り出しした
実物
切り出したクラスがこちらになります。大したことはしておらず、単純にシングルトン的な考え方を取り入れただけです。
データベースファイルへのアクセスはずっと確保したまま、要るときにインスタンスを呼び出せるようになります。
class RealmStorage: NSObject {
static let shared = RealmStorage()
var realm:Realm? = nil
private override init() {
do {
self.realm = try Realm(configuration:RealmConfiguration().config())
} catch let error as NSError {
print(error)
}
}
}
切り出したらAppDelegateからRealmに関する痕跡を綺麗サッパリ消すだけです。
ネーミングのこと
これはよく考えておかないといけないところですが、ついサボってしまいがち。
クラス(やメソッド)のネーミングのことです。
基本的に私めはノンネイティブで英単語の細かいニュアンスはわかりません。ただ、今回のようなクラスにManager
なんてものを付けると良くないことは経験上なんとなく察しがつきます。Realmに関する全てがこのクラスに詰め込まれ、ふくよかな姿に育っていく未来が見えます。
なので、今回は少し気を遣いました。
このクラスにはデータの読み書きをする処理だけを入れていくこととしました。バックアップや取得したデータのパース、リレーション云々はこのクラスで行いません。もちろん初期化設定は既に別クラスです。そういった処理が全て済んだ状態でこのクラスの出番です。また、データベースファイルから生データを取り出して必要なところへ引き渡した時点で出番は終わりです。
無い知恵を絞り、辞書を久々に引っぱり出し今回はStorage
にしてみました。RealmStorage
、まぁ多少ましなのではないでしょうか。
まとめ
まだ中身が全くない状態ですが、これでプロジェクトの本筋からはRealmを使っていることをひっそり薄味に隠すことができたんじゃないかと思います。変なこだわりだと言われてしまえばそれまでですが、こういった妙なこだわりが後々響いてくるのです。いうなれば将来の自分へのちょっとした投資です。
それとネーミングに関するあんちょこリストを作らないといけないですね。
ちょっくらGithubでも観察に行きますか……