El documento describe el concepto de "Cream Code" en Objective-C, que se refiere a código de alta calidad, entendible, extensible y mantenible. Explica que el Cream Code sigue principios como modularización, evitar duplicación de código, simplicidad y uso de pruebas. También describe técnicas para lograr Cream Code como separar responsabilidades en los controladores de vista, inyección de dependencias, patrones de diseño y pruebas. El objetivo final es producir código más legible, flexible y robusto.
6. /¿qué no es cream code?
Spaghetti Code
● Estructura compleja
● Difícil de entender
● Difícil de testear
7.
8. /¿qué no es cream code?
Código duplicado
● Propenso a errores
● Difícil de mantener
● Oculta el propósito
del código
9.
10. /¿qué no es cream code?
Código complejo
● Difícil de entender
● Difícil de mantener
● Propenso a errores
11.
12. /¿qué no es cream code?
Métodos con responsabilidad
múltiple
● Difícil de mantener
● Difícil de entender
● Código muy acoplado
● Difícil de testear
13.
14. /¿qué no es cream code?
Sin tests
● Código no probado
● Errores difíciles de
localizar
● Producto final “no
deseado”
16. /si es cream code
Código de calidad
● Modularizado, Extensible
● DRY (Don’t repeat yourself)
● KISS (Keep It Simple, Stupid)
● Con tests
● S.O.L.I.D.
17. /si es cream code
S.O.L.I.D. (buenas prácticas)
● Responsabilidad única
● Abierto a extensiones, cerrado a modificaciones
● Clases derivadas no modifican comportamiento
de su clase base
● Varias interfaces pequeñas es mejor que sólo
una grande
● Uso de abstracciones
Robert C. Martin
21. View Potingue Controller vergon/zVoiseow… cajón C ontroller
desastre
● Difícil de entender
● Difícil encontrar código
● Difícil de modificar / extender
● Difícil de mantener
● Imposible de testear
● Conflictos
22. /View Controller/Responsabilidades
Necesita saber lo que está pasando
View Controller
Eventos servidor
Interacción de usuario
Feedback de usuario
Modifica el modelo
Cambios del modelo Peticiones al servidor
Sabe qué hacer en cada momento
23. /Crema de la buena
Necesitamos crema de la buena
● Adelgazar nuestros View Controllers
● Inyección de dependencias
● Testing (Unit testing, UI...)
● Patrones de diseño
● Libros y enlaces de interés
25. /View Controllers a dieta
Necesitamos crema de la buena
● View & View Controller
● MVC
● Model View View Model
● Lógica de dominio
● Data Sources
● Lógica de Servicios
● View Controller Containment
26. ● El controlador maneja una
vista
● Sabe qué mostrar, no
cómo mostrarlo
● La vista implementa los
detalles de presentación
(jerarquía, animaciones...)
View Controller
View
eventos de
usuario
feedback
/View & View Controller
31. /Web Service
● El VC no debe contener
lógica de Web Services
● El controlador no sabe de
dónde salen los objetos
● La obtención de objetos
debe ser asíncrona
● Se comunicará a través de
delegados, notificaciones o
bloques
View Controller
getObjects
Service
33. View Controller Containment
● Disponible a partir de iOS 5
● [VC1.view addSubView:VC2.view] ???
● viewWillAppear, rotaciones…
● Nuevos métodos
● addChildViewController
● didMoveToParentViewController
● removeFromParentViewController
34. /Controller Containment
● El padre define las vistas
contenedoras
● Los hijos son notificados
cuando son añadidos
● El padre realiza las
transiciones
● Los hijos deben tener
sentido por sí mismos
View Controller
Container
View Controller
(Child)
View Controller
(Child)
37. Inyección de dependencias
● Dependencia: A depende de B,
cuando A necesita de B para hacer su
trabajo
● Inyección: El objeto que usa A le
dice a A quien es B
38. /Inyección de dependencias
Necesitamos crema de la buena
● Inyección por constructor
● Inyección de propiedades
● Inyección en métodos
● Extraer método y sobreescribir la
llamada
45. /Testing
● Test unitarios (XCTest, OCmockito)
● Test de integración (KIF)
● Test de aceptación (UIautomation)
● Jenkins (Integración continua!!!)
● Test manuales (QA)