iOS Architecture Patterns: MVVM, Clean Architecture, and TCA - Mobile Development Hub
func fetchArticle(id: UUID) async throws -> Article
func searchArticles(query: String, page: Int) async throws -> PaginatedResult
func saveArticle(_ article: Article) async throws
func deleteArticle(id: UUID) async throws
}
struct PaginatedResult
{
let items: [T]
let currentPage: Int
let totalPages: Int
let hasMore: Bool
}
// Domain/UseCases/Articles/FetchArticlesUseCase.swift
final class FetchArticlesUseCase {
private let repository: ArticleRepositoryProtocol
init(repository: ArticleRepositoryProtocol) {
self.repository = repository
}
func execute(page: Int = 1, pageSize: Int = 20) async throws -> PaginatedResult
{
// Business logic: validate, transform, coordinate
guard page > 0 else { throw UseCaseError.invalidPage }
guard pageSize > 0 && pageSize <= 100 else { throw UseCaseError.invalidPageSize }
return try await repository.fetchArticles(page: page, pageSize: pageSize)
}
}
enum UseCaseError: Error {
case invalidPage
case invalidPageSize
case notFound
case unauthorized
}
Comments
Post a Comment