{"id":14185,"date":"2020-07-07T11:03:49","date_gmt":"2020-07-07T09:03:49","guid":{"rendered":"https:\/\/www.hiberus.com\/crecemos-contigo\/?p=14185"},"modified":"2024-01-17T09:24:01","modified_gmt":"2024-01-17T08:24:01","slug":"clean-architecture-en-xamarin-forms","status":"publish","type":"post","link":"https:\/\/www.hiberus.com\/crecemos-contigo\/clean-architecture-en-xamarin-forms\/","title":{"rendered":"Clean Architecture en Xamarin Forms"},"content":{"rendered":"<p>Cuando estamos en el proceso de planificar el desarrollo de una nueva aplicaci\u00f3n generalmente no pensamos en la arquitectura y simplemente vamos a codificar guiados por algunas maquetas o una lista de requisitos gen\u00e9ricos, seamos claros, esta pr\u00e1ctica es m\u00e1s com\u00fan que pensamos, tambi\u00e9n estamos mentalmente bloqueados por la idea de ser \u00e1giles (ignorando que \u00e1gil no significa r\u00e1pido) y nos saltamos el paso de dise\u00f1ar a nivel arquitect\u00f3nico nuestras apps.<\/p>\n<p>Si no declaramos que la arquitectura es importante desde el principio, el costo de mantenimiento aumentar\u00e1 y eventualmente pasaremos m\u00e1s horas desarrollando una nueva caracter\u00edstica o, lo que es peor, una simple tarea de cambiar una parte de nuestro sistema podr\u00eda ser un problema (desorden) para desarrollar.<\/p>\n<h2>Aplicar Clean Architecture en desarrollo de aplicaciones con Xamarin<\/h2>\n<p>En este art\u00edculo, veremos c\u00f3mo Clean Architecture podr\u00eda ayudarnos a organizar y estructurar nuestros proyectos de Xamarin, utilizando algunas referencias del famoso libro <em><strong>Clean Architecture: A Craftsman&#8217;s Guide to Software Structure and Design<\/strong><\/em> de <strong>Robert C. Martin<\/strong> (tambi\u00e9n conocido como <strong>T\u00edo Bob<\/strong>) en el que dice:<\/p>\n<p>&nbsp;<\/p>\n<blockquote><p><em>\u00abLa arquitectura de un sistema de software es la forma dada a ese sistema por quienes lo construyen. Dicha forma est\u00e1 en la divisi\u00f3n de ese sistema en componentes, la disposici\u00f3n de esos componentes y la manera en que esos componentes se comunican con entre s\u00ed. El prop\u00f3sito de esa estructura es facilitar el desarrollo, despliegue, operaci\u00f3n y mantenimiento del sistema de software que contiene \u00ab.<\/em><\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<p>Clean Architecture tiene un objetivo principal, que es la separaci\u00f3n de preocupaciones, esta separaci\u00f3n se realiza dividiendo el software en capas. En la forma m\u00e1s simple, nuestra arquitectura debe tener al menos una capa para las reglas de negocio y otra capa para las interfaces de usuario y sistema.<\/p>\n<h2>Sistemas en Clean Architecture<\/h2>\n<p>Este tipo de arquitectura produce sistemas con las siguientes caracter\u00edsticas (extra\u00eddas del libro del t\u00edo Bob):<\/p>\n<h3><strong>Independiente de frameworks<\/strong><\/h3>\n<p>La arquitectura no depende de la existencia de alguna librer\u00eda ni framework especifico. Esto le permite utilizar dichos frameworks como herramientas, en lugar de obligarnos a ajustar nuestro sistema a sus limitaciones.<\/p>\n<h3><strong>Capacidad de hacer tests<\/strong><\/h3>\n<p>Las reglas de negocio (a trav\u00e9s de casos de uso) se pueden probar sin la interfaz de usuario, la base de datos, el servidor web o cualquier otro elemento externo.<\/p>\n<h3><strong>Independiente de la interfaz de usuario<\/strong><\/h3>\n<p>La interfaz de usuario puede cambiar f\u00e1cilmente, sin cambiar el resto del sistema. Una interfaz de usuario de Xamarin podr\u00eda reemplazarse por una interfaz de usuario de consola o una web app, por ejemplo, sin cambiar las reglas de negocio.<\/p>\n<h3><strong>Independiente de la fuente de datos<\/strong><\/h3>\n<p>Podr\u00edamos cambiar SQLite o Realm por CosmosDB u otra cosa sin muchos inconvenientes. Nuestras reglas no est\u00e1n vinculadas a la base de datos.<\/p>\n<h3><strong>Independiente de cualquier servicio externo<\/strong><\/h3>\n<p>De hecho, las reglas de su negocio no saben nada sobre las implementaciones de interfaces con el mundo exterior.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"attachment_14186\" style=\"width: 1034px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin.png\" data-rel=\"lightbox-image-0\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14186\" class=\"wp-image-14186 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin.png\" alt=\"\" width=\"1024\" height=\"768\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin-300x225.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin-768x576.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Clean_Architecture_Xamarin-360x270.png 360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><p id=\"caption-attachment-14186\" class=\"wp-caption-text\">Capas en Clean Architecture, a continuaci\u00f3n las definimos.<\/p><\/div>\n<h2>Capas en Clean Architecture<\/h2>\n<ul id=\"mce_27\" class=\"editor-rich-text__tinymce mce-content-body\" role=\"textbox\">\n<li><strong>Presentation<\/strong>: capa que contiene las interfaces de usuario.<\/li>\n<li><strong>Framework<\/strong>: implementa las interacciones con SDKs espec\u00edficos de la plataforma y librer\u00edas externas, tambi\u00e9n proporciona implementaciones concretas de la capa de datos.<\/li>\n<li><strong>Use cases<\/strong>: contiene reglas de negocio espec\u00edficas de nuestra aplicaci\u00f3n. Encapsula e implementa todos los casos de uso del sistema.<\/li>\n<li><strong>Domain<\/strong>: contiene las entidades que representan objetos de negocio, estos objetos pueden tener m\u00e9todos (Reglas Comerciales Cr\u00edticas) o puede ser un conjunto de plain objects.<\/li>\n<li><strong>Data Interfaces<\/strong>: interfaces con la definici\u00f3n de todas las fuentes de datos, se implementan en la capa de Framework.<\/li>\n<li><strong>Repositories<\/strong>: contiene los repositorios, utilizan las interfaces de datos para recuperar informaci\u00f3n externa.<\/li>\n<li><strong>Tests<\/strong>: pruebas unitarias que apuntan a los casos de uso.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>La regla de oro que hace que esta arquitectura funcione es la Regla de Dependencia:<\/p>\n<p><em>\u00abLas dependencias del c\u00f3digo fuente deben apuntar solo hacia adentro, hacia pol\u00edticas de nivel superior\u00bb<\/em>.<\/p>\n<p>Dicho esto, nada en un c\u00edrculo interno conoce sobre algo en un c\u00edrculo externo.<\/p>\n<p>Para mantener un enfoque simple, vamos a agrupar las capas en App (c\u00edrculos amarillos), Core (c\u00edrculos grises) y Tests (c\u00edrculos rojos).<\/p>\n<p>Analicemos esto con una aplicaci\u00f3n con un solo caso de uso: obtener pedidos para el usuario actual.<\/p>\n<p>&nbsp;<\/p>\n<p>As\u00ed es como se ve en un proyecto Xamarin Forms:<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam.png\" data-rel=\"lightbox-image-1\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14188 aligncenter\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam.png\" alt=\"\" width=\"3002\" height=\"844\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam.png 3002w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-300x84.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-1024x288.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-768x216.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-1536x432.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-2048x576.png 2048w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Project-Structure-Clean-Xam-360x101.png 360w\" sizes=\"auto, (max-width: 3002px) 100vw, 3002px\" \/><\/a><\/p>\n<div id=\"attachment_14189\" style=\"width: 522px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/App-Layer.png\" data-rel=\"lightbox-image-2\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14189\" class=\"wp-image-14189 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/App-Layer.png\" alt=\"\" width=\"512\" height=\"962\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/App-Layer.png 512w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/App-Layer-160x300.png 160w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/App-Layer-360x676.png 360w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/a><p id=\"caption-attachment-14189\" class=\"wp-caption-text\">Capa de Aplicaci\u00f3n<\/p><\/div>\n<div id=\"attachment_14190\" style=\"width: 488px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Core-Layer.png\" data-rel=\"lightbox-image-3\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14190\" class=\"wp-image-14190 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Core-Layer.png\" alt=\"\" width=\"478\" height=\"1002\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Core-Layer.png 478w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Core-Layer-143x300.png 143w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Core-Layer-360x755.png 360w\" sizes=\"auto, (max-width: 478px) 100vw, 478px\" \/><\/a><p id=\"caption-attachment-14190\" class=\"wp-caption-text\">Capa Core<\/p><\/div>\n<p>&nbsp;<\/p>\n<div id=\"attachment_14191\" style=\"width: 444px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Tests-Layer.png\" data-rel=\"lightbox-image-4\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-14191\" class=\"wp-image-14191 size-full\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Tests-Layer.png\" alt=\"\" width=\"434\" height=\"170\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Tests-Layer.png 434w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Tests-Layer-300x118.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Tests-Layer-360x141.png 360w\" sizes=\"auto, (max-width: 434px) 100vw, 434px\" \/><\/a><p id=\"caption-attachment-14191\" class=\"wp-caption-text\">Capa de tests<\/p><\/div>\n<p>&nbsp;<\/p>\n<p>Como se puede ver, todo comienza en la interfaz de usuario, cuando el usuario abre la aplicaci\u00f3n, muestra el MainPage.xaml de Orders, esta vista tiene un Binding Context conectado al MainPageViewModel que llama al caso de uso correspondiente para obtener la lista de pedidos y mostrarlos al usuario.<\/p>\n<p>&nbsp;<\/p>\n<p>La conexi\u00f3n entre el caso de uso y todas las dependencias necesarias se realiza mediante Unity (usando Prism) en la capa de aplicaci\u00f3n, siguiendo la Regla de Dependencia, es algo como esto:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow.png\" data-rel=\"lightbox-image-5\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-14192 aligncenter\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow.png\" alt=\"\" width=\"3060\" height=\"1441\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow.png 3060w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-300x141.png 300w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-1024x482.png 1024w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-768x362.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-1536x723.png 1536w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-2048x964.png 2048w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Orders_Flow-360x170.png 360w\" sizes=\"auto, (max-width: 3060px) 100vw, 3060px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>El resultado final del flujo es esta pantalla:<\/p>\n<p><a href=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator.png\" data-rel=\"lightbox-image-6\" data-rl_title=\"\" data-rl_caption=\"\" title=\"\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-14193 aligncenter\" src=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-548x1024.png\" alt=\"\" width=\"377\" height=\"705\" srcset=\"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-548x1024.png 548w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-161x300.png 161w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-768x1435.png 768w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-822x1536.png 822w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-1096x2048.png 1096w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator-360x673.png 360w, https:\/\/www.hiberus.com\/crecemos-contigo\/wp-content\/uploads\/2020\/07\/Simulator.png 1110w\" sizes=\"auto, (max-width: 377px) 100vw, 377px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Si deseas examinar todo el c\u00f3digo, puede consultar el <a href=\"https:\/\/github.com\/AngelGarcia13\/CleanXamarin\" target=\"_blank\" rel=\"noopener noreferrer\">proyecto en GitHub<\/a>.<\/p>\n<p>En conclusi\u00f3n (s\u00ed, otra referencia del t\u00edo Bob):<\/p>\n<blockquote><p><em>Su arquitectura debe informar a los lectores sobre el sistema, no sobre los frameworks que utiliz\u00f3 en su sistema. Si est\u00e1 construyendo un sistema de atenci\u00f3n m\u00e9dica, cuando los nuevos programadores miran el c\u00f3digo fuente, su primera impresi\u00f3n deber\u00eda ser: \u00abOh, este es un sistema de atenci\u00f3n m\u00e9dica\u00bb. Esos nuevos programadores deber\u00edan poder aprender todos los casos de uso del sistema, y \u200b\u200ba\u00fan as\u00ed no saber c\u00f3mo se ve (a nivel de interfaz de usuario) el sistema.<\/em><\/p><\/blockquote>\n        <div class=\"row\">\n            <div class=\"block-cta-form\" style=\"background-color: #003664;\">\n                <div class=\"content-cta-form\">\n                    <div class=\"text-cta-form\">\n                        <p class=\"title-cta-form\">\u00bfQuieres m\u00e1s informaci\u00f3n sobre nuestros servicios de desarrollo de aplicaciones m\u00f3viles?<\/p>\n                        <p>Contacta con nuestro equipo de Mobile<\/p>\n                    <\/div>\n                    <div class=\"form-fields\">\n                        \n<div class=\"wpcf7 no-js\" id=\"wpcf7-f33973-o1\" lang=\"es-ES\" dir=\"ltr\" data-wpcf7-id=\"33973\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/14185#wpcf7-f33973-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Formulario de contacto\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"33973\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"es_ES\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f33973-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7_recaptcha_response\" value=\"\" \/>\n<\/fieldset>\n<div id=\"responsive-form\" class=\"clearfix\">\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"nombre\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Nombre *\" value=\"\" type=\"text\" name=\"nombre\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"apellido\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Apellido *\" value=\"\" type=\"text\" name=\"apellido\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"correo\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Correo corporativo *\" value=\"\" type=\"email\" name=\"correo\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"telf-contacto\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Tel\u00e9fono *\" value=\"\" type=\"tel\" name=\"telf-contacto\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"compania\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Compa\u00f1ia *\" value=\"\" type=\"text\" name=\"compania\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"mensaje\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Mensaje *\" name=\"mensaje\"><\/textarea><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"politica\"><span class=\"wpcf7-form-control wpcf7-acceptance\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"politica\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">He le\u00eddo y acepto la <a href=\"https:\/\/www.hiberus.com\/politica\" target=\"_blank\"><u>Pol\u00edtica de privacidad<\/u><\/a><\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-full color-acceptance\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"marketing\"><span class=\"wpcf7-form-control wpcf7-acceptance optional\"><span class=\"wpcf7-list-item\"><label><input type=\"checkbox\" name=\"marketing\" value=\"1\" aria-invalid=\"false\" \/><span class=\"wpcf7-list-item-label\">Me gustar\u00eda recibir comunicaciones de marketing de Hiberus y sobre sus productos, servicios y eventos.<\/span><\/label><\/span><\/span><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div class=\"column-half\">\n\t\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Contacta con nosotros\" \/>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div class=\"form-row\">\n\t\t<div id=\"campos_ocultos\" class=\"hidden\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new1\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new1\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new1\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new2\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new2\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new2\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new3\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new3\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new3\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new4\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new4\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new4\" \/><\/span><br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"oculto_analitica_new_p\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text\" id=\"oculto_analitica_new_p\" aria-invalid=\"false\" value=\"\" type=\"text\" name=\"oculto_analitica_new_p\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<!--end responsive-form--><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/div>\n        \n","protected":false},"excerpt":{"rendered":"<p>Cuando estamos en el proceso de planificar el desarrollo de una nueva aplicaci\u00f3n generalmente no pensamos en la arquitectura y simplemente vamos&#8230;<\/p>\n","protected":false},"author":182,"featured_media":14222,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_ayudawp_aiss_exclude":false,"footnotes":""},"categories":[234,3],"tags":[14,30],"class_list":{"0":"post-14185","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-aplicaciones-moviles","8":"category-negocio-electronico","9":"tag-aplicaciones-multiplataforma","10":"tag-desarrollo-de-aplicaciones-moviles"},"acf":[],"_links":{"self":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/14185","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/users\/182"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/comments?post=14185"}],"version-history":[{"count":5,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/14185\/revisions"}],"predecessor-version":[{"id":39622,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/posts\/14185\/revisions\/39622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media\/14222"}],"wp:attachment":[{"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/media?parent=14185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/categories?post=14185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hiberus.com\/crecemos-contigo\/wp-json\/wp\/v2\/tags?post=14185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}