🔥
FirestoreClient
Firestore 上方的通用抽象层。
使用的库
- Firebase/Firestore: 一个可扩展的 NoSQL 云数据库,用于存储和同步客户端和服务器端开发的数据。
- Google/Promises: 一个现代框架,为 Swift 提供一个同步构造,以方便编写异步代码。
- Identity: 一个小型库,让在 Swift 中创建类型安全标识符变得简单。
特性
- 支持 Codable。
- 支持 Promises。
- 提供易于使用的读写操作。
- 基于 KeyPath 的查询构建器。
- 类型安全标识符。
使用方法
实体
您的模型必须符合 实体
协议,而该协议符合 可编码
协议。例如
struct Book: Entity {
var id: ID = ""
var title: String
var author: String
var releaseDate: Date?
var pages: Int
}
符合 查询键
协议以启用键路径查询。
extension Book: QueryKey {
static var keys: [PartialKeyPath<Book>: CodingKey] {
return [
\Self.id: CodingKeys.id,
\Self.title: CodingKeys.title,
\Self.author: CodingKeys.author,
\Self.releaseDate: CodingKeys.releaseDate,
\Self.pages: CodingKeys.pages
]
}
}
用途场景
用途场景是一个执行特定任务的协议。
protocol BooksUseCase {
func loadBooks() -> Promise<[Book]>
func loadBook(byID id: Book.ID) -> Promise<Book>
func saveBook(_ book: Book) -> Promise<Void>
func updateBook(_ book: Book) -> Promise<Void>
func deleteBook(byID id: Book.ID) -> Promise<Void>
}
BooksUseCase
具体实现的示例。
final class DefaultBooksUseCase<Repository: AbstractRepository> where Repository.Value == Book {
private let repository: Repository
init(repository: Repository) {
self.repository = repository
}
}
extension DefaultBooksUseCase: BooksUseCase {
func loadBooks() -> Promise<[Book]> {
return repository.query {
$0.filter(by: \.author, equal: "George R. R. Martin")
.order(by: \.releaseDate)
.limit(to: 5)
}
}
func loadBook(byID id: Book.ID) -> Promise<Book> {
return repository.fetch(byID: id)
}
func saveBook(_ book: Book) -> Promise<Void> {
return repository.save(entity: book)
}
func updateBook(_ book: Book) -> Promise<Void> {
return repository.update(entity: book)
}
func deleteBook(byID id: Book.ID) -> Promise<Void> {
return repository.delete(byID: id)
}
}
用途场景工厂
它有助于隐藏用途场景的具体实现。
protocol UseCaseFactory {
func makeBooksUseCase() -> BooksUseCase
}
final class DefaultUseCaseFactory: UseCaseFactory {
func makeBooksUseCase() -> BooksUseCase {
let path = Path("books")
let repository = FirestoreRepository<Book>(path: path)
return DefaultBooksUseCase(repository: repository)
}
}
安装
CocoaPods
CocoaPods 是一个用于 Cocoa 项目的依赖关系管理器。有关使用和安装说明,请访问其网站。要使用 CocoaPods 将 FirestoreClient 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它。
pod 'FirestoreClient', :git => 'https://github.com/AnasAlhasani/FirestoreClient'
然后,运行以下命令
$ pod install
作者
Anas Alhasani