4
私はアプリケーションでレルムを使用していますが、将来私はあまり変更を加えることなくデータベースプロバイダを交換できるように、できるだけ抽象化しようとしています。レルムの永続性のためのデザインパターン
このパターンはうまくいきましたが、私は以下について心配しています。
- 新しいレルムオブジェクトをオーバーヘッドごとに作成しています(現状ではレルムオブジェクトは内部的にキャッシュされています)。
- レルムを使用する方法に問題はありますか?
目的に適したデザインパターンはありますか?完全固体デザインパターンです
public struct BookDataLayer: BookDataLayerProvider { func isBookAvailable(bookIdentifier: String) throws -> Bool { let database = try getDatabase() return !database.objects(Book).filter("identifier = %@", bookIdentifier).isEmpty } func createOrUpdateBook(bookIdentifier: String, sortIndex: Int) throws { let book = Book() Book.bookIdentifier = bookIdentifier Book.sortIndex = sortIndex try create(book, update: true) }} protocol BookDataLayerProvider : DataAccessLayer { func isBookAvailable(bookIdentifier: String) throws -> Bool func createOrUpdateBook(bookIdentifier: String, sortIndex: Int) throws n} extension DataAccessLayer { func getDatabase() throws -> Realm { do { let realm = try Realm() // Advance the transaction to the most recent state realm.refresh() return realm } catch { throw DataAccessError.DatastoreConnectionError } } func create(object: Object, update: Bool = false) throws { let database = try self.getDatabase() do { database.beginWrite() database.add(object, update: update) // Commit the write transaction // to make this data available to other threads try database.commitWrite() } catch { throw DataAccessError.InsertError } }} // Usage let bookDataLayer = BookDataLayer() bookDataLayer.isBookAvailable("4557788") bookDataLayer.createOrUpdateBook("45578899", 10)
私にお答えする時間を取ってくれてありがとう。私は今までレルムを愛しています。あなたの答えは本当に役に立ちます。 – Jani
私の喜び!あなたが私の答えを見つけたことをうれしく思います!あなたがレルムを楽しんでいるのを聞いて神様!それ以上の質問があればお気軽に! :) – TiM