我应该使用存储库for Realm(ios)

mih*_*tel 8 service repository realm ios swift

首先,我在ios中相对较新,没有任何使用移动dbs的经验.

想要集成到我的应用程序Realm(swift),并想知道将服务层和存储库分开或者所有内容都包含在服务中是否有意义.

一些例子有一个很好的观点.

class UserService {

    var userRepository: UserRepository!

    func findById(userId: String) -> User? {
        return userRepository.findById(userId: userId)
    }
}

class UserRepository {

    private let realm = try! Realm()

    func findById(userId: String) -> User? {
        return realm.object(ofType: User.self, forPrimaryKey: userId)
    }
}
Run Code Online (Sandbox Code Playgroud)

TiM*_*TiM 7

在数据库API顶部添加抽象层非常常见.许多其他开发人员已经将Realm包装在他们自己的类中,以便将API隐藏在他们的业务逻辑代码中.

需要注意几个方面的考虑因素:

  1. 你需要保持小心,不要意外伤害这种表现.一些用户甚至将数据从Realm对象复制到他们自己的对象中.这违背了Realm的"零拷贝"机制的目的,所以应用程序现在本身比本机使用Realm更糟糕.
  2. 这是"先发制人的工作".你事先做了很多工作,以防万一你可能会改变主意.我刚刚在一个相当大的应用程序中将Core Data转换为Realm,它只花了几个小时.试图构建一个"通用"数据库解决方案,您可能永远不会最终使用它可能无法获得回报的声音.
  3. 您正在增加应用复杂性.这意味着更多的漏洞可能需要更严格的测试,以确保您的API和数据库API保持同步.

只要您要移动的新数据库也包含管理对象(即核心数据),从一个数据库转换到另一个数据库通常不是很多工作.因此,我建议在必要时避免不必要的工作.

免责声明:我为Realm工作,但这是我的观点,因为过去使用Core Data,原始SQLite和Realm的个人应用程序.

  • 嗨@Cyupa!如果你有两个Realm`Object`实例指向磁盘上的同一个对象,如果你删除了一个对象实例,另一个将自动失效,你将无法再从中读取数据.这实际上取决于"为什么"你想要在删除后保留数据,但它仍然是制作内存中副本的可接受的折衷方案. (2认同)