Introducción al Patrón MVVM
Todo para Uno y Uno para Todos
Arquitectura y Diseño en Apps iOS
Patrones MVC y MVP en Apps iOS
Principios SOLID
Patrón de arquitectura MVVM
Quiz: Introducción al Patrón MVVM
Estructura de un Proyecto con MVVM
Inicio del proyecto y estructura básica MVVM
Paquete Models
Core Data
Paquete Views
ViewModel
Quiz: Estructura de un Proyecto con MVVM
Operaciones CRUD en un proyecto con MVVM
Agregar ToDos (Parte 1)
Agregar ToDos (Parte 2)
Listar ToDos
Actualizar ToDos
Archivar ToDos
Desarchivar ToDos
Eliminar ToDos
Actualizar el estado de los ToDos
Diseño y Validación de Vistas para ToDos
Quiz: Operaciones CRUD en un proyecto con MVVM
Clean Architecture
Introducción a Clean Architecture
Estructura de Clean Architecture
Inicio del proyecto con Clean Architecture
Capa de Datos
Comunicación de red HTTP con TheMovieDB
Capa de Dominio
Capa de Presentación
Integración de Capas
Quiz: Clean Architecture
MVVM y Clean Architecture
Highlights
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
La implementación de una API bajo la filosofía de Clean Architecture nos permite mantener una clara separación de responsabilidades y facilitar la escalabilidad del proyecto. Empezamos por crear nuestros modelos de datos, que son la base de todas las operaciones. Estos modelos se encuentran en la capa más interna de nuestra arquitectura, seguida por la capa de dominio y, finalmente, la capa de presentación.
Para conectarnos a una API externa, debemos comenzar con la definición de nuestros endpoints. Esto implica crear un archivo en la carpeta network, que servirá como referencia para las rutas que necesitamos apuntar. Aquí definiremos dos enums principales, HTTPMethod
y Endpoint
:
enum HTTPMethod: String {
case get = "GET"
case post = "POST"
}
enum Endpoint {
case popularShows
case tvShowDetails(Int)
var url: URL {
// Construcción de la URL usando baseUrl y API Key
}
}
La construcción de URLs es crucial para que nuestra API funcione correctamente. Necesitamos definir una URL base a partir de la cual construiremos solicitudes específicas. El ejemplo de la base URL para The MovieDB podría ser:
let baseUrl = "https://api.themoviedb.org/3/"
Luego, añadimos el endpoint correspondiente, como tv
para programas de televisión, y agregamos parámetros como la API Key y el idioma:
var urlComponents = URLComponents(string: baseUrl + "tv/popular")!
urlComponents.queryItems = [
URLQueryItem(name: "api_key", value: "YOUR_API_KEY"),
URLQueryItem(name: "language", value: "en-US"),
URLQueryItem(name: "page", value: "1")
]
La clase APIClient
será responsable de manejar las solicitudes HTTP a la API. Este cliente preparará las solicitudes y decodificará las respuestas JSON:
final class APIClient {
func request(_ endpoint: Endpoint) async throws -> T {
let urlRequest = URLRequest(url: endpoint.url)
urlRequest.httpMethod = HTTPMethod.get.rawValue
let (data, _) = try await URLSession.shared.data(for: urlRequest)
let decoder = JSONDecoder()
return try decoder.decode(T.self, from: data)
}
}
En una arquitectura limpia, el repositorio actúa como un intermediario entre las capas de datos y de dominio. Aquí definimos un protocolo y su implementación:
protocol TVShowRepository {
func fetchPopularTVShows() async throws -> [TVShow]
func fetchTVShowDetails(id: Int) async throws -> TVShowDetails
}
final class TVShowRepositoryImplement: TVShowRepository {
private let apiClient: APIClient
init(apiClient: APIClient) {
self.apiClient = apiClient
}
func fetchPopularTVShows() async throws -> [TVShow] {
let response: PopularShowsResponse = try await apiClient.request(.popularShows)
return response.results
}
func fetchTVShowDetails(id: Int) async throws -> TVShowDetails {
return try await apiClient.request(.tvShowDetails(id))
}
}
Implementar Clean Architecture permite una mayor flexibilidad y mantenibilidad del código. Cada capa tiene responsabilidades claramente definidas, lo que facilita la sustitución o actualización de una parte del sistema sin afectar a las demás. Además, fomenta la reutilización del código y mejora la escalabilidad del proyecto.
Con cada paso cuidadosamente planeado e implementado, tu aplicación estará lista para gestionar eficazmente la comunicación con APIs externas, mantener un código limpio y ofrecer una gran experiencia de usuario.
Aportes 0
Preguntas 0
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?