{"id":34601,"date":"2018-01-11T12:19:58","date_gmt":"2018-01-11T12:19:58","guid":{"rendered":"https:\/\/stage.cactus-now.com\/noticias-de-cactus\/ios-best-practices-architecture\/"},"modified":"2026-06-01T17:11:41","modified_gmt":"2026-06-01T14:11:41","slug":"mejores-practicas-para-ios-parte-3-arquitectura","status":"publish","type":"post","link":"https:\/\/stage.cactus-now.com\/es\/nuestro-blog\/mejores-practicas-para-ios-parte-3-arquitectura\/","title":{"rendered":"Mejores Pr\u00e1cticas para iOS. Parte 3: Arquitectura"},"content":{"rendered":"<div class=\"section-inner sectionLayout--insetColumn\">\n<p id=\"4790\" class=\"graf graf--p graf-after--h3\">Como continuaci\u00f3n de <a href=\"https:\/\/stage.cactus-now.com\/blog\/2018\/01\/08\/swift-code-style\/\">Parte 2: Estilo de C\u00f3digo Swift<\/a><\/p>\n<p id=\"eeff\" class=\"graf graf--p graf-after--p\"><em>Nunca creas en \u00abhag\u00e1moslo r\u00e1pido y luego lo refactorizamos\u00bb.<\/em><\/p>\n<\/div>\n\n<div class=\"section-inner sectionLayout--insetColumn\">\n<p>Hablemos sobre los patrones de dise\u00f1o de arquitectura comunes.<\/p>\n<p>Comenzamos con el dise\u00f1o VIPER. \u00bfPor qu\u00e9?<br>Es la mejor pr\u00e1ctica para descomponer tu sistema en muchos bloques peque\u00f1os de responsabilidad \u00fanica: es simple y no requiere mucho tiempo.<br>Mucha gente escribe materiales te\u00f3ricos sobre VIPER y sugiere que un proceso de desarrollo con arquitectura limpia requiere mucho tiempo.<\/p>\n<p>Pero no es cierto.<\/p>\n<p>\u00bfPor qu\u00e9?<\/p>\n<ul>\n<li><strong>Primero<\/strong> \u2013 Podemos generar mucho c\u00f3digo reutilizable usando el <a href=\"https:\/\/github.com\/rambler-digital-solutions\/Generamba\">generador de c\u00f3digo Generamba<\/a> y <a href=\"https:\/\/github.com\/Shopify\/liquid\">nuestras propias plantillas<\/a>. *Descubriremos c\u00f3mo trabajar con Generamba en nuestros pr\u00f3ximos art\u00edculos.<\/li>\n<li><strong>Segundo<\/strong> \u2013 Cuando trabajamos con VIPER, desarrollamos nuestra aplicaci\u00f3n utilizando los principios S.O.L.I.D. Esto significa que cada componente tiene una sola responsabilidad. Los componentes dependen de abstracciones. El c\u00f3digo depende de las clases: se inyectan en los configuradores de m\u00f3dulos. Como resultado, tenemos un sistema flexible que se puede extender y modificar r\u00e1pidamente.<\/li>\n<li><strong>Tercero<\/strong> \u2013 Todos nuestros m\u00f3dulos tienen una excelente calidad de cobertura de c\u00f3digo. Esto significa que tenemos la posibilidad de detectar olores de c\u00f3digo \/ errores durante el desarrollo y corregirlos antes de la ronda de control de calidad. Esto tambi\u00e9n supone un ahorro de tiempo considerable.<\/li>\n<\/ul>\n<p>Bien, descubramos cada componente.<\/p>\n<\/div>\n\n\n<figure class=\"wp-block-image alignnone is-resized\"><a href=\"https:\/\/stage.cactus-now.com\/wp-content\/uploads\/2018\/01\/IOS-architecture.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" decoding=\"async\" src=\"https:\/\/stage.cactus-now.com\/wp-content\/uploads\/2018\/01\/IOS-architecture.png\" alt=\"Arquitectura iOS\" class=\"wp-image-1627\" width=\"790\"\/><\/a><figcaption>VIPER \u2014 Arquitectura Limpia<\/figcaption><\/figure>\n\n\n<ul class=\"wp-block-list\"><li><strong>Vista (View)<\/strong> \u2013 Es un UIViewController, que tiene salidas (outlets) a las vistas y maneja la interacci\u00f3n del usuario. La Vista tiene 2 protocolos.<br>Entrada de la Vista (View Input) \u2013 implementado en la capa de Vista y llamado desde la capa del Presentador.<br>*Mostrar informaci\u00f3n en la Vista, p. ej., <em>showProgress()<\/em><br>Salida de la Vista (View Output) \u2013 implementado en la capa del Presentador y llamado desde la capa de Vista.<br>*Notificar al presentador sobre las acciones del usuario, p. ej., <em>addNewItem()<\/em><br><\/li><li><strong>Presentador (Presenter)<\/strong> \u2013 Es una clase que se comunica con la Vista, el Enrutador (Router) y el Interactor usando los siguientes protocolos.<br>Salida de la Vista (View Output) \u2013 mira la secci\u00f3n de Vista.<br>Salida del Interactor (Interactor Output) \u2013 implementado en la capa del Presentador y llamado desde la capa del Interactor.<br>*Notificar al presentador sobre actualizaciones, p. ej., <em>dataDidLoad()<\/em><br>Entrada de la Vista (View Input) \u2013 mira la secci\u00f3n de Vista.<br>Entrada del Interactor (Interactor Input) \u2013 implementado en la capa del Interactor y llamado desde la capa del Presentador.<br>*Solicitar actualizaciones, p. ej., <em>loadItems()<br><\/em> Entrada del Enrutador (Router Input) \u2013 implementado en la capa del Enrutador y llamado desde la capa del Presentador.<br>*Navegar entre m\u00f3dulos, p. ej., <em>showDetailsModule()<br><\/em><\/li><li><strong>Interactor<\/strong> \u2013 Es una clase que se comunica con el Presentador y las Entidades. El Interactor tiene 2 protocolos.<br>Entrada del Interactor (Interactor Input) \u2013 mira la secci\u00f3n del Presentador.<br>Salida del Interactor (Interactor Output) \u2013 mira la secci\u00f3n del Presentador.<br><\/li><li><strong>Entidad (Entity)<\/strong> \u2013 Estas incluyen cualquier representaci\u00f3n de datos como CoreData Entity, Realm Object, etc.<br><\/li><li><strong>Configurador (Configurator)<\/strong> \u2013 Una cosa m\u00e1s.<br>VIPER tiene muchos componentes que necesitamos inyectar entre s\u00ed.<br>El Configurador inyecta capas entre ellos.<\/li><\/ul>\n\n\n<p>Esta fue una breve gu\u00eda sobre la arquitectura limpia VIPER.<\/p>\n\n<p><strong>Continuar leyendo: <\/strong><a href=\"https:\/\/stage.cactus-now.com\/blog\/2018\/01\/16\/ios-best-practices-s-o-l-i-d\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (se abre en una nueva pesta\u00f1a)\">iOS Best Practices. Part 4: S.O.L.I.D. >>><\/a><\/p>\n\n\n<hr class=\"wp-block-separator is-style-dots\"\/>\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft is-resized\"><img loading=\"lazy\" decoding=\"async\" decoding=\"async\" src=\"https:\/\/stage.cactus-now.com\/wp-content\/uploads\/2018\/02\/Cactus2600-1-e1570193954328.jpg\" alt=\" class=\"wp-image-7917\" width=\"150\" height=\"195\"\/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/www.linkedin.com\/in\/maksimvialykh\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (se abre en una nueva pesta\u00f1a)\">Maxim Vialykh<\/a> es el L\u00edder T\u00e9cnico de iOS en CactusSoft.<\/p>\n\n<p><strong>Experiencia T\u00e9cnica<\/strong><br>Lenguajes de programaci\u00f3n: Swift, Objective-C, Java<br>Tecnolog\u00edas y Plataformas: iOS, Android, Windows Phone, Amazon S3, Google Cloud, Google APIs, Facebook APIs<br>Frameworks: PhoneGap, Xamarin<br>Herramientas: Invision, SVN, Git, PhoneGap, Titanium, Xamarin, Sketch, xCode, IntelliJ IDEA<\/p>","protected":false},"excerpt":{"rendered":"<p>Como continuaci\u00f3n de Parte 2: Estilo de C\u00f3digo Swift Nunca creas en \u00abhag\u00e1moslo r\u00e1pido y luego lo refactorizamos\u00bb. Hablemos sobre los patrones de dise\u00f1o de arquitectura comunes. Comenzamos con el dise\u00f1o VIPER. \u00bfPor qu\u00e9?Es la mejor pr\u00e1ctica para descomponer tu sistema en muchos bloques peque\u00f1os de responsabilidad \u00fanica: es simple y no requiere mucho tiempo.Mucha [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":34602,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[700],"tags":[],"class_list":["post-34601","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-nuestro-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/posts\/34601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/comments?post=34601"}],"version-history":[{"count":0,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/posts\/34601\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/media\/34602"}],"wp:attachment":[{"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/media?parent=34601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/categories?post=34601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stage.cactus-now.com\/es\/wp-json\/wp\/v2\/tags?post=34601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}