{"id":229081,"date":"2022-11-03T19:11:00","date_gmt":"2022-11-03T16:11:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229081"},"modified":"2022-11-09T05:27:46","modified_gmt":"2022-11-09T02:27:46","slug":"beneficios-del-patron-de-repositorio-por-que-deberiamos-considerarlo","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/beneficios-del-patron-de-repositorio-por-que-deberiamos-considerarlo\/","title":{"rendered":"Beneficios del patr\u00f3n de repositorio: por qu\u00e9 deber\u00edamos considerarlo"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/es\/introduccion-al-patron-del-repositorio\/\" title=\"Ayer\" >Ayer<\/a>, di una introducci\u00f3n al patr\u00f3n del repositorio. En resumen, es uno de esos patrones que creo que cualquier persona que trabaje con middleware construido sobre WordPress deber\u00eda entender.<\/p>\n<p>Al dar una introducci\u00f3n a un patr\u00f3n como este, puede ser dif\u00edcil hacer justicia al patr\u00f3n cuando se necesita:<\/p>\n<ul>\n<li>presentarlo,<\/li>\n<li>explicar c\u00f3mo funciona,<\/li>\n<li>cubrir los beneficios,<\/li>\n<li>y dar una peque\u00f1a demostraci\u00f3n.<\/li>\n<\/ul>\n<p>Pero la verdadera ventaja del repositorio radica no solo en abstraer la capa de datos del resto de la aplicaci\u00f3n, sino que puede (o deber\u00eda) poder intercambiarse f\u00e1cilmente con varios almacenes de datos sin cambiar la API.<\/p>\n<p>Por ejemplo, en un caso, es posible que deba recuperar datos de la base de datos de WordPress, en otros casos, es posible que deba recuperar algo de una API de terceros, o tal vez haya alg\u00fan otro lugar del que necesite recuperar datos.<\/p>\n<p>Independientemente, la idea detr\u00e1s del patr\u00f3n de repositorio es que lo que sea que se encuentre detr\u00e1s de \u00e9l no importa siempre que la API que proporciona funcione para la capa de la aplicaci\u00f3n que lo llama.<\/p>\n<p>Y dado que hemos cubierto una introducci\u00f3n al patr\u00f3n de repositorio, echemos un vistazo a algunos de los beneficios del patr\u00f3n de repositorio y c\u00f3mo podemos implementarlo en el contexto de los proyectos de WordPress.<\/p>\n<h2>Beneficios del patr\u00f3n de repositorio<\/h2>\n<p>Hay algunas formas de empezar a explicar el patr\u00f3n, as\u00ed que voy a empezar con un diagrama simple:<\/p>\n<p>Los beneficios del patr\u00f3n de repositorio incluyen la abstracci\u00f3n del almac\u00e9n de datos<\/p>\n<p>Observe en la imagen de arriba, hay tres componentes principales:<\/p>\n<ol>\n<li>la l\u00f3gica de dominio (o la l\u00f3gica de negocios) que he etiquetado como &quot;Aplicaci\u00f3n&quot;,<\/li>\n<li>el repositorio,<\/li>\n<li>el almac\u00e9n de datos,<\/li>\n<\/ol>\n<p>En cuanto a la aplicaci\u00f3n, las reglas de negocio siempre se mantendr\u00e1n relativamente consistentes. Al menos deber\u00edan, \u00bfverdad?<\/p>\n<p>El repositorio es lo que act\u00faa como medio de comunicaci\u00f3n entre la l\u00f3gica empresarial y el almac\u00e9n de datos.<\/p>\n<p>Ahora, el almac\u00e9n de datos puede ser una base de datos, quiz\u00e1s un conjunto de archivos (que no recomendar\u00eda), una API para un tercero, una lista de informaci\u00f3n recuperada de otra aplicaci\u00f3n, etc.<\/p>\n<p>El punto es que el repositorio proporcionar\u00e1 una API limpia en la que la l\u00f3gica empresarial puede escribir y leer (y m\u00e1s sobre esto en un momento) sin preocuparse por los detalles de ad\u00f3nde van los datos o c\u00f3mo regresan.<\/p>\n<p>Ese es el trabajo del repositorio. Y eso es lo que hace que sea importante tener una API consistente y eso es lo importante para asegurarse de que tenga los detalles de implementaci\u00f3n del almac\u00e9n de datos con el que est\u00e1 interactuando.<\/p>\n<h3>en el acoplamiento<\/h3>\n<p>Adem\u00e1s de tener su aplicaci\u00f3n correctamente segmentada, el patr\u00f3n de repositorio beneficia a la arquitectura ya que ayuda a desacoplar las partes de su aplicaci\u00f3n.<\/p>\n<p>Es decir, la l\u00f3gica empresarial no sabe nada sobre c\u00f3mo o d\u00f3nde se almacenan los datos. Simplemente sabe que puede escribirlo y recuperarlo y puede hacerlo usando una API limpia.<\/p>\n<p>El repositorio es responsable de comunicar dicho almac\u00e9n de datos para organizar la serializaci\u00f3n y la recuperaci\u00f3n, pero debe proporcionar una API coherente, por lo que la capa de datos no tiene que hacer gimnasia sint\u00e1ctica para leer y escribir su informaci\u00f3n.<\/p>\n<h3>Detalles de implementacion<\/h3>\n<p>Hasta este punto, he estado representando el repositorio como una clase concreta.<\/p>\n<p>La cuesti\u00f3n es que una aplicaci\u00f3n probablemente tendr\u00e1 varios repositorios. Y por eso, es una buena idea tener interfaces que cada repositorio pueda implementar.<\/p>\n<p>As\u00ed es como se define el contrato de m\u00e9todos que proporcionar\u00e1 el repositorio. Y as\u00ed es como puede asegurarse de que cada repositorio est\u00e9 conectado al almac\u00e9n de datos adecuado.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166772-61e79a138aeb3.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-166772-61e79a138aeb3.png\" alt=\"Beneficios del patr\u00f3n de repositorio: por qu\u00e9 deber\u00edamos considerarlo\" ><\/a><\/p>\n<p>Una implementaci\u00f3n de interfaz para m\u00faltiples repositorios.<\/p>\n<p>Entonces, digamos que su aplicaci\u00f3n necesita comunicarse con la base de datos de WordPress, as\u00ed como con una API de terceros.<\/p>\n<p>Idealmente, la interfaz proporcionar\u00eda un conjunto com\u00fan de m\u00e9todos, pero los detalles de implementaci\u00f3n variar\u00edan seg\u00fan el repositorio porque cada repositorio tendr\u00e1 las credenciales y la capacidad necesarias para comunicarse con el almac\u00e9n de datos.<\/p>\n<p>Sin embargo, el avance a la interfaz es lo que le da al patr\u00f3n su poder. La l\u00f3gica del dominio no tiene que preocuparse por c\u00f3mo se guarda la informaci\u00f3n o c\u00f3mo se recupera. Simplemente llama a los m\u00e9todos definidos en la interfaz y el objeto necesario se ocupa de ello.<\/p>\n<p>Simplemente llama a los m\u00e9todos definidos en la interfaz y el objeto necesario se ocupa de ello.<\/p>\n<h2>\u00bfC\u00f3mo se ver\u00eda esto en WordPress?<\/h2>\n<p>Esta es una buena pregunta (y no, no la invent\u00e9 solo para responderla por mi cuenta \ud83d\ude42), y puede ser dif\u00edcil dar un gran ejemplo porque gran parte de lo que hacemos interact\u00faa directamente con la base de datos de WordPress.<\/p>\n<p>Esto no significa que no haya abstracciones que podamos usar, como Publicaciones, P\u00e1ginas, Usuarios o cualquier otro tipo de publicaci\u00f3n personalizada que optemos por crear.<\/p>\n<p>Pero WordPress proporciona una API para gran parte de esto. Puedo ver un caso en el que, por ejemplo, un usuario con campos adicionales que se han agregado podr\u00eda beneficiarse de un repositorio de usuarios.<\/p>\n<p>O un tipo de publicaci\u00f3n personalizada con una gran cantidad de metadatos tambi\u00e9n podr\u00eda beneficiarse de un repositorio al tener los detalles encapsulados en el repositorio.<\/p>\n<h3>Un ejemplo de alto nivel<\/h3>\n<p>Digamos, por ejemplo, que tiene un tipo de publicaci\u00f3n personalizada para un evento, y el evento tiene un t\u00edtulo y una descripci\u00f3n que encajar\u00edan naturalmente con el t\u00edtulo y el contenido de la publicaci\u00f3n.<\/p>\n<p>Pero luego tiene metadatos sobre su ubicaci\u00f3n, su hora de inicio, su hora de finalizaci\u00f3n, etc. Eso tambi\u00e9n podr\u00eda ser encapsulado por el repositorio para que pueda tener un objeto Evento, pasarlo al repositorio y luego dejar que el repositorio env\u00ede la informaci\u00f3n al lugar adecuado en la base de datos.<\/p>\n<p>Y lo mismo ocurre con la recuperaci\u00f3n de la informaci\u00f3n: sabe d\u00f3nde obtenerla, c\u00f3mo completar un objeto de evento y luego devolv\u00e9rselo a la persona que llama.<\/p>\n<h2>Volver sobre la pista<\/h2>\n<p>Pero toda esta charla sobre un evento se est\u00e1 desviando un poco del tema, por lo que tal vez contin\u00fae hablando sobre eso y c\u00f3mo encaja con el repositorio en una publicaci\u00f3n de seguimiento. Claramente, cuando se habla de esto, hay mucho que cubrir.<\/p>\n<p>Prefiero tomarlo en pasos m\u00e1s peque\u00f1os<\/p>\n<p>En resumen, si tiene un repositorio de eventos, es probable que tenga un objeto de evento o una entidad de evento. Y c\u00f3mo esto encaja en WordPress, los tipos de publicaciones personalizadas, los metadatos, etc. introduce un nivel de complejidad que puede parecer desalentador al principio, pero finalmente vale la pena cuando se trabaja con una aplicaci\u00f3n web m\u00e1s grande.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Echemos un vistazo a algunos de los beneficios del patr\u00f3n de repositorio y c\u00f3mo podemos implementarlo en el contexto de los proyectos de WordPress.<\/p>\n","protected":false},"author":1,"featured_media":223872,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[716,914,840],"tags":[1172],"class_list":["post-229081","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desarrollador","category-otro","category-tutoriales","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229081","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=229081"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/229081\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/223872"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=229081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=229081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=229081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}