{"id":12,"date":"2021-06-03T15:05:56","date_gmt":"2021-06-03T15:05:56","guid":{"rendered":"https:\/\/lafilosofiadelsoftware.wordpress.com\/?p=12"},"modified":"2021-08-23T22:17:39","modified_gmt":"2021-08-24T03:17:39","slug":"clean-architecture-parte-2","status":"publish","type":"post","link":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/","title":{"rendered":"Clean Architecture en Arquitectura N-capas parte 2"},"content":{"rendered":"\n<p>Continuando con nuestro prop\u00f3sito de aplicar conceptos de&nbsp;<a href=\"https:\/\/lafilosofiadelsoftware.wordpress.com\/2021\/06\/03\/clean-architecture-en-arquitectura-n-capas-parte-1\/\">clean architecture en una arquitectura de N-capas<\/a>&nbsp;trataremos inicialmente los siguientes temas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u00bfEs la base de datos nuestro modelo de negocio?<\/li><li>Interfaces como mecanismo de verdadera abstracci\u00f3n.<\/li><li>\u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d?<\/li><li>\u00bfDebemos usar Excepciones?<\/li><li>Evitando los side-effects<\/li><\/ul>\n\n\n\n<p id=\"c122\">Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje de programaci\u00f3n Kotlin con Spring Framework, sin embargo, puede ser aplicado a cualquier otro lenguaje orientado a objetos (o no) f\u00e1cilmente .<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" id=\"e001\">\u00bfEs la base de datos nuestro modelo de negocio?<\/h1>\n\n\n\n<p id=\"6061\">La respuesta siempre ser\u00e1 NO, la base de datos&nbsp;no debe ser m\u00e1s que un ente externo a nuestro dominio (l\u00f3gica de negocio) haciendo que este dependa de sus propios modelos y no tenga nada que ver con una especificaci\u00f3n de base de datos (SQL o noSQL)<\/p>\n\n\n\n<p id=\"5d25\">Existe una mala costumbre generalizada de hacer girar toda nuestra aplicaci\u00f3n entorno a la base de datos, objetos&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\">orm<\/a>&nbsp;por doquier contaminando nuestra l\u00f3gica de negocio con especificaciones de base de datos y asumiendo a toda luces que la entidad principal es el objeto de base de datos.<\/p>\n\n\n\n<p id=\"2369\">Debemos poder llegar a reemplazar la especificaci\u00f3n de la DB (o dejar de usarla) de manera tan f\u00e1cil como cambiar un par de archivos y ajustar unos cuantos mapper. Para lograr lo anterior nuestras bases de datos (SQL o noSQL) debemos verlas como temas de infraestructura externa y nuestra l\u00f3gica de negocio no debe de conocer.<\/p>\n\n\n\n<p id=\"b949\">\u00bfC\u00f3mo logramos esto? definiendo correctamente unas interfaces y un par de mapper que conviertan de objetos de base de datos a nuestros objetos de dominio (Si su aplicaci\u00f3n es bastante compleja posiblemente no llegar\u00e1 a los objetos de dominio directamente, veremos esto en los siguientes post).<br>Mucha charla, poco c\u00f3digo, vamos a la acci\u00f3n:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/c7eca-00gmizgtmutmk4x3z.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p id=\"6549\">Demos un vistazo m\u00e1s a detalle de estos 3 archivos:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/40426-0dhlzdw2pgnjnowpb.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p id=\"4247\">Tenemos una clase&nbsp;<em>BookOrm<\/em>&nbsp;(conocidas como Entity) que no es m\u00e1s que un&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\">orm<\/a>&nbsp;que contiene adicional una funci\u00f3n para convertir a nuestras clases de dominio ( nuestra infraestructura puede conocer de nuestro modelo, pero no al contrario), una interface&nbsp;<em>BookRepository<\/em>&nbsp;para hacer uso de la potencia de&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-data-jpa\">SpringJPA<\/a>&nbsp;y nuestra clase&nbsp;<em>BookSqlRepositoryImpl<\/em>&nbsp;que gracias a la inversi\u00f3n de control pueda usar la interface&nbsp;<em>BookRepository<\/em>&nbsp;para hacer consultas predeterminadas por Spring a la DB.<\/p>\n\n\n\n<p id=\"787a\">Pero, \u00bfen qu\u00e9 se diferencia esto a como ya hemos visto en docena de proyectos?, detallemos la implementaci\u00f3n de la interfaz que hace&nbsp;<em>BookSqlRepositoryImpl&nbsp;<\/em>de&nbsp;<em>SearchBookExternalPort, es&nbsp;<\/em>ac\u00e1 es donde comienza la magia, esta interfaz (<em>SearchBookExternalPort)<\/em>&nbsp;fue definida por nuestra l\u00f3gica de negocio la cual defini\u00f3 un contrato (puerto) que debe ser implementado por un adaptador, que en este caso es&nbsp;<em>BookSqlRepositoryImpl<\/em>, pero f\u00e1cilmente podr\u00eda ser un&nbsp;<em>BookRestRepositoryImpl<\/em>.<\/p>\n\n\n\n<p id=\"e746\">Aclaremos un poco que es un puerto y un adaptador:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Puerto<\/strong>: especifica un contrato a ser cumplido sin detallar el c\u00f3mo.<\/li><li><strong>Adaptador<\/strong>: Nos da la implementaci\u00f3n de cierto puerto (el c\u00f3mo)<\/li><\/ul>\n\n\n\n<p id=\"84a2\">Si son detallistas al visualizar la imagen podr\u00e1n observar que nuestra clase&nbsp;<em>BookSqlRepositoryImpl&nbsp;<\/em>no retorna nuestros objetos de&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\">orm<\/a>&nbsp;(<em>BookOrm)<\/em>&nbsp;al exterior, en su lugar realiza una conversi\u00f3n (mapper) hacia un objeto de dominio (Book, ubicado en la carpeta&nbsp;<strong>service<\/strong>), de esta forma la l\u00f3gica de negocio localizada en la carpeta&nbsp;<strong>Service<\/strong>&nbsp;no tendr\u00e1 nada que ver con temas externos al no recibir un objeto&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\">orm<\/a>.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/90484-1qdwqgupabzanaccsduwdrg.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p id=\"1e62\">Con lo anterior cumplimos el&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Dependency_inversion_principle\">DIP<\/a>&nbsp;en el momento que nuestra l\u00f3gica de negocio depende de una abstracci\u00f3n (puerto) para obtener los datos y no d\u00e9 una implementaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"ecc8\">Para guardar un libro \u00bfla l\u00f3gica de negocio debe conocer nuestro ORM ?<\/h2>\n\n\n\n<p id=\"8328\">Nuevamente NO. Nuestra l\u00f3gica de negocio solo conoce a sus modelos, veamos un alcance de c\u00f3mo deber\u00edamos realizar el guardado<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/e3a65-0amnjzquf1qrzv-87.png\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/4db2b-0cvx01ofp3g80kych.png\" alt=\"\"\/><figcaption>Modelo usado por la capa de l\u00f3gica de negocio<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/726b3-06ibdegs-cgerol_-.png\" alt=\"\"\/><figcaption>Interfaz para acceder a nuestra l\u00f3gica de negocio desde un delegate o facade:<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/ff623-0xxrwa78gchsitqs7.png\" alt=\"\"\/><figcaption>Nuestra l\u00f3gica de negocio recibe una interfaz (puerto) para realizar el registro de los Books.<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/aea2e-0cttwko47fsa4jpu3.png\" alt=\"\"\/><figcaption>Puerto usado por la l\u00f3gica de negocio<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/d9416-0sccrwpsn_ah-psbs.png\" alt=\"\"\/><figcaption>Nuestra anterior clase de BookSqlRepositoryImpl nos sirve de adaptador nuevamente, dicho registro de libro podr\u00eda hacerse en un servicio web externo o un noSQL (veremos esto en siguientes post) y nuestro ORM, convierte de modelo a su idioma (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\">orm<\/a>)<\/figcaption><\/figure><\/div>\n\n\n\n<p id=\"d70a\">Con lo anterior vimos el primer tema sobre base de datos en c\u00f3mo interact\u00faa con nuestra l\u00f3gica de negocio y un abre bocas sobre \u00e9l trabajar con abstracciones, en las siguientes publicaciones veremos los siguientes temas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Continuando con nuestro prop\u00f3sito de aplicar conceptos de&nbsp;clean architecture en una arquitectura de N-capas&nbsp;trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje &#8230; <a title=\"Clean Architecture en Arquitectura N-capas parte 2\" class=\"read-more\" href=\"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/\" aria-label=\"Leer m\u00e1s sobre Clean Architecture en Arquitectura N-capas parte 2\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[2],"tags":[7,8,11,12,19],"class_list":["post-12","post","type-post","status-publish","format-standard","hentry","category-clean-architecture","tag-clean-architecture","tag-clean-code","tag-ingeniera-de-software","tag-n-capas","tag-software-engineer"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"daniel.saavedra\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"La Filosofia del Software - Un espacio de reflexi\u00f3n de c\u00f3mo debe hacerse un buen software\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software\" \/>\n\t\t<meta property=\"og:description\" content=\"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-06-03T15:05:56+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-08-24T03:17:39+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#blogposting\",\"name\":\"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software\",\"headline\":\"Clean Architecture en Arquitectura N-capas parte 2\",\"author\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/author\\\/daniel-saavedra\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/lafilosofiadelsoftware.files.wordpress.com\\\/2021\\\/06\\\/c7eca-00gmizgtmutmk4x3z.png\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#articleImage\"},\"datePublished\":\"2021-06-03T15:05:56-05:00\",\"dateModified\":\"2021-08-23T22:17:39-05:00\",\"inLanguage\":\"es-ES\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#webpage\"},\"articleSection\":\"Clean Architecture, Clean Architecture, Clean Code, Ingeniera de software, n-capas, Software Engineer\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com#listItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\\\/\\\/lafilosofiadelsoftware.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/category\\\/clean-architecture\\\/#listItem\",\"name\":\"Clean Architecture\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/category\\\/clean-architecture\\\/#listItem\",\"position\":2,\"name\":\"Clean Architecture\",\"item\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/category\\\/clean-architecture\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#listItem\",\"name\":\"Clean Architecture en Arquitectura N-capas parte 2\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com#listItem\",\"name\":\"Inicio\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#listItem\",\"position\":3,\"name\":\"Clean Architecture en Arquitectura N-capas parte 2\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/category\\\/clean-architecture\\\/#listItem\",\"name\":\"Clean Architecture\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/#organization\",\"name\":\"La Filosofia del Software\",\"description\":\"Un espacio de reflexi\\u00f3n de c\\u00f3mo debe hacerse un buen software\",\"url\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/\",\"telephone\":\"+573017774586\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#organizationLogo\",\"width\":646,\"height\":394},\"image\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/daniel-saavedra-1997ba27\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/author\\\/daniel-saavedra\\\/#author\",\"url\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/author\\\/daniel-saavedra\\\/\",\"name\":\"daniel.saavedra\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/56e74c320ef187d84ac5133accf32325?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"daniel.saavedra\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#webpage\",\"url\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/\",\"name\":\"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software\",\"description\":\"Continuando con nuestro prop\\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \\u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\\u00f3n. \\u00bfC\\u00f3mo sobrevivir a las \\u201cCualquierCosaService\\u201d? \\u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\\u00f3n pr\\u00e1ctica de la teor\\u00eda usare como lenguaje\",\"inLanguage\":\"es-ES\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/2021\\\/06\\\/03\\\/clean-architecture-parte-2\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/author\\\/daniel-saavedra\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/index.php\\\/author\\\/daniel-saavedra\\\/#author\"},\"datePublished\":\"2021-06-03T15:05:56-05:00\",\"dateModified\":\"2021-08-23T22:17:39-05:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/#website\",\"url\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/\",\"name\":\"La Filosofia del Software\",\"description\":\"Un espacio de reflexi\\u00f3n de c\\u00f3mo debe hacerse un buen software\",\"inLanguage\":\"es-ES\",\"publisher\":{\"@id\":\"https:\\\/\\\/lafilosofiadelsoftware.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software","description":"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje","canonical_url":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#blogposting","name":"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software","headline":"Clean Architecture en Arquitectura N-capas parte 2","author":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/author\/daniel-saavedra\/#author"},"publisher":{"@id":"https:\/\/lafilosofiadelsoftware.com\/#organization"},"image":{"@type":"ImageObject","url":"http:\/\/lafilosofiadelsoftware.files.wordpress.com\/2021\/06\/c7eca-00gmizgtmutmk4x3z.png","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#articleImage"},"datePublished":"2021-06-03T15:05:56-05:00","dateModified":"2021-08-23T22:17:39-05:00","inLanguage":"es-ES","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#webpage"},"isPartOf":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#webpage"},"articleSection":"Clean Architecture, Clean Architecture, Clean Code, Ingeniera de software, n-capas, Software Engineer"},{"@type":"BreadcrumbList","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com#listItem","position":1,"name":"Inicio","item":"https:\/\/lafilosofiadelsoftware.com","nextItem":{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/#listItem","name":"Clean Architecture"}},{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/#listItem","position":2,"name":"Clean Architecture","item":"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/","nextItem":{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#listItem","name":"Clean Architecture en Arquitectura N-capas parte 2"},"previousItem":{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com#listItem","name":"Inicio"}},{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#listItem","position":3,"name":"Clean Architecture en Arquitectura N-capas parte 2","previousItem":{"@type":"ListItem","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/#listItem","name":"Clean Architecture"}}]},{"@type":"Organization","@id":"https:\/\/lafilosofiadelsoftware.com\/#organization","name":"La Filosofia del Software","description":"Un espacio de reflexi\u00f3n de c\u00f3mo debe hacerse un buen software","url":"https:\/\/lafilosofiadelsoftware.com\/","telephone":"+573017774586","logo":{"@type":"ImageObject","url":"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#organizationLogo","width":646,"height":394},"image":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#organizationLogo"},"sameAs":["https:\/\/www.linkedin.com\/in\/daniel-saavedra-1997ba27\/"]},{"@type":"Person","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/author\/daniel-saavedra\/#author","url":"https:\/\/lafilosofiadelsoftware.com\/index.php\/author\/daniel-saavedra\/","name":"daniel.saavedra","image":{"@type":"ImageObject","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/56e74c320ef187d84ac5133accf32325?s=96&d=mm&r=g","width":96,"height":96,"caption":"daniel.saavedra"}},{"@type":"WebPage","@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#webpage","url":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/","name":"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software","description":"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje","inLanguage":"es-ES","isPartOf":{"@id":"https:\/\/lafilosofiadelsoftware.com\/#website"},"breadcrumb":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/#breadcrumblist"},"author":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/author\/daniel-saavedra\/#author"},"creator":{"@id":"https:\/\/lafilosofiadelsoftware.com\/index.php\/author\/daniel-saavedra\/#author"},"datePublished":"2021-06-03T15:05:56-05:00","dateModified":"2021-08-23T22:17:39-05:00"},{"@type":"WebSite","@id":"https:\/\/lafilosofiadelsoftware.com\/#website","url":"https:\/\/lafilosofiadelsoftware.com\/","name":"La Filosofia del Software","description":"Un espacio de reflexi\u00f3n de c\u00f3mo debe hacerse un buen software","inLanguage":"es-ES","publisher":{"@id":"https:\/\/lafilosofiadelsoftware.com\/#organization"}}]},"og:locale":"es_ES","og:site_name":"La Filosofia del Software - Un espacio de reflexi\u00f3n de c\u00f3mo debe hacerse un buen software","og:type":"article","og:title":"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software","og:description":"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje","og:url":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/","og:image":"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg","og:image:secure_url":"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg","article:published_time":"2021-06-03T15:05:56+00:00","article:modified_time":"2021-08-24T03:17:39+00:00","twitter:card":"summary","twitter:title":"Clean Architecture en Arquitectura N-capas parte 2 - La Filosofia del Software","twitter:description":"Continuando con nuestro prop\u00f3sito de aplicar conceptos de clean architecture en una arquitectura de N-capas trataremos inicialmente los siguientes temas: \u00bfEs la base de datos nuestro modelo de negocio? Interfaces como mecanismo de verdadera abstracci\u00f3n. \u00bfC\u00f3mo sobrevivir a las \u201cCualquierCosaService\u201d? \u00bfDebemos usar Excepciones? Evitando los side-effects Nota: Para la aplicaci\u00f3n pr\u00e1ctica de la teor\u00eda usare como lenguaje","twitter:image":"https:\/\/lafilosofiadelsoftware.com\/wp-content\/uploads\/2021\/08\/cropped-Dia-Mundial-de-la-Filosofia-Socrates.jpg"},"aioseo_meta_data":{"post_id":"12","title":null,"description":null,"keywords":[],"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":{"id":"#aioseo-article-64f4e9fb42891","slug":"article","graphName":"Article","label":"Art\u00edculo","properties":{"type":"BlogPosting","name":"#post_title","headline":"#post_title","description":"#post_excerpt","image":"","keywords":"","author":{"name":"#author_name","url":"#author_url"},"dates":{"include":true,"datePublished":"","dateModified":""}}},"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"WebPage\"}}","pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":{"locations":{"business":{"name":"","businessType":"","image":"","areaServed":"","urls":{"website":"","aboutPage":"","contactPage":""},"address":{"streetLine1":"","streetLine2":"","zipCode":"","city":"","state":"","country":"","addressFormat":"#streetLineOne\n#streetLineTwo\n#city, #state #zipCode"},"contact":{"email":"","phone":"","phoneFormatted":"","fax":"","faxFormatted":""},"ids":{"vat":"","tax":"","chamberOfCommerce":""},"payment":{"priceRange":"","currenciesAccepted":"","methods":""}}},"openingHours":{"useDefaults":true,"show":true,"alwaysOpen":false,"use24hFormat":false,"timezone":"","labels":{"closed":"","alwaysOpen":""},"days":{"monday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"tuesday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"wednesday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"thursday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"friday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"saturday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"},"sunday":{"open24h":false,"closed":false,"openTime":"09:00","closeTime":"17:00"}}}},"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2021-08-24 03:00:49","updated":"2025-06-04 03:29:20","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/lafilosofiadelsoftware.com\" title=\"Inicio\">Inicio<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/\" title=\"Clean Architecture\">Clean Architecture<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tClean Architecture en Arquitectura N-capas parte 2\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Inicio","link":"https:\/\/lafilosofiadelsoftware.com"},{"label":"Clean Architecture","link":"https:\/\/lafilosofiadelsoftware.com\/index.php\/category\/clean-architecture\/"},{"label":"Clean Architecture en Arquitectura N-capas parte 2","link":"https:\/\/lafilosofiadelsoftware.com\/index.php\/2021\/06\/03\/clean-architecture-parte-2\/"}],"_links":{"self":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/12"}],"collection":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":1,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/12\/revisions"}],"predecessor-version":[{"id":140,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/posts\/12\/revisions\/140"}],"wp:attachment":[{"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/media?parent=12"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/categories?post=12"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lafilosofiadelsoftware.com\/index.php\/wp-json\/wp\/v2\/tags?post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}