首先,我在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)
}
}
答案 0 :(得分:6)
在数据库API的顶部添加抽象层非常常见。许多其他开发人员已经将Realm包装在他们自己的类中,以便将API隐藏在他们的业务逻辑代码中。
需要注意以下几点:
只要您要移动的新数据库也包含管理对象(即核心数据),从一个数据库转换到另一个数据库通常不需要很多工作。因此,我建议在必要之前避免不必要的工作。
免责声明:我为Realm工作,但这是我的观点,因为过去曾使用Core Data,原始SQLite和Realm发布个人应用程序。
答案 1 :(得分:1)
您可以使用扩展程序添加提取方法。 您可以为数据库中的每个实体添加Object子类,然后在需要时为这些方法添加扩展。 例如:
import RealmSwift
// Dog model
class Dog: Object {
dynamic var name = ""
dynamic var owner: Person? // Properties can be optional
}
您的提取方法:
extension Dog {
class func fetch(with name: String) -> Dog? {
return try! Realm().objects(Dog.self).filter("name == %@", name).first
}
}