0Pricing
Swift Academy · Lesson

Use Case and Repository Patterns

Defining use cases as Swift protocols and implementing repository interfaces.

What is a Use Case?

A use case (interactor) encapsulates a single business action, orchestrating domain entities and repositories.

struct PlaceOrderUseCase {
  let cart: CartRepository
  let payment: PaymentService
  let orders: OrderRepository
  func execute(userId: Int) async throws -> Order {
    let items = try await cart.items(for: userId)
    let receipt = try await payment.charge(items: items)
    return try await orders.create(receipt: receipt)
  }
}

Single Responsibility

Each use case does exactly one thing. Multiple responsibilities mean multiple use cases.

// One use case per business action:
struct FetchUserUseCase { ... }
struct UpdateUserUseCase { ... }
struct DeleteUserUseCase { ... }

All lessons in this course

  1. Layers: Domain, Data and Presentation
  2. Use Case and Repository Patterns
  3. Dependency Inversion with Protocol Abstractions
  4. Wiring Layers Together without a DI Framework
← Back to Swift Academy