{"id":3873,"date":"2023-10-23T10:48:07","date_gmt":"2023-10-23T13:48:07","guid":{"rendered":"https:\/\/elemarjr.com\/arquiteturadesoftware\/?p=3873"},"modified":"2026-04-27T17:21:33","modified_gmt":"2026-04-27T20:21:33","slug":"integrando-sistemas-de-software","status":"publish","type":"volume-1","link":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/","title":{"rendered":"Cap 1.2 Integrando sistemas de software"},"content":{"rendered":"<p><strong>Dificilmente um software conseguir\u00e1 atender sozinho todas as demandas de seu contexto de opera\u00e7\u00e3o<\/strong>. Por essa raz\u00e3o, para cumprir, de fato, os objetivos do neg\u00f3cio, a arquitetura de um software dever\u00e1 contemplar, al\u00e9m dele pr\u00f3prio, a rela\u00e7\u00e3o com os demais &#8220;integrantes sist\u00eamicos&#8221;, delimitando responsabilidades e relacionamentos.<\/p>\n<p>Sabendo\u00a0que, por exemplo, um software digitaliza ou suporta a execu\u00e7\u00e3o de atividades de um processo, ser\u00e1 mais bem sucedido aquele que, necess\u00e1rio para uma atividade, &#8220;conseguir passar o bast\u00e3o&#8221; para os demais, necess\u00e1rios para as demais atividades.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-3876 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/process_.png\" alt=\"\" width=\"319\" height=\"267\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/process_.png 666w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/process_-300x251.png 300w\" sizes=\"(max-width: 319px) 100vw, 319px\" \/><\/p>\n<p>Segregando responsabilidades, um software gerencial ser\u00e1 bem sucedido se conseguir &#8220;consolidar dados&#8221; de diversas fontes transacionais.<\/p>\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <em>Data is a precious thing and will last longer than the systems themselves.<\/em>\r\n<p><strong>Tim Berners-Lee<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-3878 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/sig.png\" alt=\"\" width=\"318\" height=\"377\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/sig.png 672w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/sig-253x300.png 253w\" sizes=\"(max-width: 318px) 100vw, 318px\" \/><\/p>\n<p>Finalmente, um software especialista, para ser &#8220;bem sucedido&#8221;, precisar\u00e1 estar &#8220;dispon\u00edvel&#8221; para acionamento f\u00e1cil.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3879 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/specialized.png\" alt=\"\" width=\"448\" height=\"164\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/specialized.png 934w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/specialized-300x110.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/specialized-768x281.png 768w\" sizes=\"(max-width: 448px) 100vw, 448px\" \/><\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/m.media-amazon.com\/images\/I\/41WwuOYUZiL.jpg\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/m.media-amazon.com\/images\/I\/41WwuOYUZiL.jpg\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Archimate (R) 3.1 Specification<\/p>\r\nA linguagem ArchiMate permite que arquitetos corporativos descrevam, analisem e visualizem os relacionamentos entre os dom\u00ednios de neg\u00f3cios de maneira efetiva.<\/p>\n<p>Este livro \u00e9 a especifica\u00e7\u00e3o oficial da linguagem de modelagem ArchiMate 3.1 do The Open Group.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/pubs.opengroup.org\/architecture\/archimate3-doc\/toc.html\" target=\"_blank\" rel=\"noopener\">Acessar livro<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Habitue-se a utilizar, consistentemente e corretamente, linguagens visuais de modelagem, como ArchiMate e C4, para comunicar aspectos relevantes de arquitetura. <\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p><strong>A rela\u00e7\u00e3o de um software com artefatos externos \u00e9, ao mesmo tempo, a express\u00e3o de sua utilidade e a principal fonte de problemas em ambiente produtivo. <\/strong>Sejam as integra\u00e7\u00f5es expl\u00edcitas, com esfor\u00e7o de desenvolvimento do time para fazer com que ela aconte\u00e7a, ou impl\u00edcitas, acontecendo a revelia e gerando apenas dificuldade para evolu\u00e7\u00e3o, as integra\u00e7\u00f5es s\u00e3o aspecto cr\u00edtico da arquitetura de qualquer software.<\/p>\n<p>Quando as integra\u00e7\u00f5es n\u00e3o s\u00e3o devidamente projetadas, acontecem &#8220;organicamente&#8221;, muitas vezes como iniciativas <em>shadow IT.\u00a0<\/em>Obviamente, esse \u00e9 um\u00a0<em>bad smell<\/em> para o futuro da solu\u00e7\u00e3o como um todo.<\/p>\nQuanto mais relacionamentos um software possuir, maior ser\u00e1 seu impacto e relev\u00e2ncia no contexto onde funciona. <strong>Em termos simples, software com poucos relacionamentos costuma ser in\u00fatil ou ser importante apenas em per\u00edodos curtos e eventuais<\/strong>. N\u00e3o \u00e9 exagero dizer que qualidade &#8220;interna&#8221; de um software pouco importar\u00e1 se suas &#8220;integra\u00e7\u00f5es&#8221; n\u00e3o forem bem-sucedidas no m\u00e9dio\/longo prazo.\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>Aplicativos interessantes raramente operam isolados.<\/em><\/p>\n<p>\r\n<p><strong>Hohpe e Woolf<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<strong>Boa parte dos problemas em ambiente produtivo ocorrem por defici\u00eancias no tratamento de falhas de integra\u00e7\u00e3o entre sistemas.<\/strong> N\u00e3o raro, sistemas de\u00a0<em>e-commerce,<\/em> por exemplo, apresentam instabilidades por falhas na integra\u00e7\u00e3o com o sistema banc\u00e1rio que viabiliza a cobran\u00e7a ou, ainda, devido a problemas para acessar o invent\u00e1rio.\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>O acoplamento forte permite que as &#8220;rachaduras&#8221; em uma parte do sistema se propaguem &#8211; ou se multipliquem &#8211; atrav\u00e9s das camadas ou limites do subsistema.\u00a0<\/em><\/p>\n<p>\r\n<p><strong>Nygard<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Aspectos arquiteturais relevantes em integra\u00e7\u00f5es<\/h2>\n<p><strong>Ao analisar a integra\u00e7\u00e3o entre dois ou mais sistemas de software \u00e9 importante analisar tr\u00eas aspectos: forma de comunica\u00e7\u00e3o, necessidade de consist\u00eancia e coordena\u00e7\u00e3o.<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3911 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/aia.png\" alt=\"\" width=\"570\" height=\"515\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/aia.png 896w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/aia-300x271.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/aia-768x694.png 768w\" sizes=\"(max-width: 570px) 100vw, 570px\" \/><\/p>\n<p><strong>Come\u00e7ando pela forma de comunica\u00e7\u00e3o, chegamos a duas possibilidades gen\u00e9ricas: s\u00edncrona e ass\u00edncrona.<\/strong>\u00a0Dois sistemas de software tem comunica\u00e7\u00e3o <span style=\"text-decoration: underline;\">s\u00edncrona<\/span> quando a requisi\u00e7\u00e3o de uma das partes implica em um tempo espera at\u00e9 que uma resposta seja devolvida (atualiza\u00e7\u00e3o de status ou indicativo de erro). Por outro lado, a comunica\u00e7\u00e3o \u00e9 <span style=\"text-decoration: underline;\">ass\u00edncrona<\/span> quando a parte requisitante prossegue trabalho ap\u00f3s confirma\u00e7\u00e3o m\u00ednima de que sua solicita\u00e7\u00e3o foi aceta.<\/p>\n<p><strong>As decis\u00f5es arquiteturais que dizem respeito ao formato de comunica\u00e7\u00e3o entre sistemas tem impacto direto em atributos de qualidade como seguran\u00e7a, resili\u00eancia, escalabilidade e desempenho.<\/strong><\/p>\n<p><strong>Tratando de consist\u00eancia h\u00e1, tamb\u00e9m, duas possibilidades gen\u00e9ricas: atomicidade ou eventualidade<\/strong>, sendo que, dois sistemas de software tem consist\u00eancia at\u00f4mica quando, em hip\u00f3tese alguma, seus estados refletem momentos diferentes (tudo est\u00e1 atualizado ou nada est\u00e1 atualizado). Por outro lado, \u00a0dois sistemas tem consist\u00eancia eventual quando defasagens sejam suportadas sem preju\u00edzo de opera\u00e7\u00e3o.<\/p>\n<p><strong>Em sistemas distribu\u00eddos, dificilmente se atinge indicadores adequados de escalabilidade e resili\u00eancia quando atomicidade \u00e9 indispens\u00e1vel.<\/strong><\/p>\n<p><strong>Finalmente, tratando de coordena\u00e7\u00e3o h\u00e1, tamb\u00e9m, duas possibilidades gen\u00e9ricas: coreografia ou orquestra\u00e7\u00e3o<\/strong>, sendo que, dois sistemas de software ser\u00e3o &#8220;coreografados&#8221; quando n\u00e3o dependerem de um agente externo (um terceiro software) para garantir que a integra\u00e7\u00e3o aconte\u00e7a. Entretanto, h\u00e1 cen\u00e1rios com\u00a0<em>workflows\u00a0<\/em>complexos &#8211; envolvendo diversas etapas &#8211; onde algum tipo de orquestra\u00e7\u00e3o torna-se indispens\u00e1vel.<\/p>\n<p><strong>Cabe ao arquiteto decidir, para cada integra\u00e7\u00e3o, se a comunica\u00e7\u00e3o ser\u00e1 s\u00edncrona ou ass\u00edncrona, a consist\u00eancia dever\u00e1 ser at\u00f4mica ou eventual e, finalmente, a coordena\u00e7\u00e3o ocorrer\u00e1 por coreografia.<\/strong><\/p>\n<h2>Integra\u00e7\u00e3o simples ou colabora\u00e7\u00e3o<\/h2>\n<p><strong>Eventualmente, integra\u00e7\u00f5es tem regras e formatos que extrapolam as &#8220;responsabilidades&#8221; de cada um dos sistemas, individualmente, expressando funcionalidades in\u00e9ditas resultantes de uma &#8220;colabora\u00e7\u00e3o&#8221;.<\/strong><\/p>\n<p>Considere, por exemplo, uma organiza\u00e7\u00e3o pode desejar implementar suporte especial para o atendimento a revendedores, combinando funcionalidades de seus sistema de CRM e \u00a0ERP &#8211; nenhum deles planejado, originalmente, para essa finalidade.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1602 aligncenter\" src=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab.png\" sizes=\"(max-width: 464px) 100vw, 464px\" srcset=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab.png 972w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab-300x165.png 300w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab-768x424.png 768w\" alt=\"\" width=\"464\" height=\"256\" \/><\/p>\n<p>A integra\u00e7\u00e3o desses sistemas ser\u00e1 uma colabora\u00e7\u00e3o que, provavelmente, envolver\u00e1 a escrita de c\u00f3digo novo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1607 aligncenter\" src=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4.png\" sizes=\"(max-width: 734px) 100vw, 734px\" srcset=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4.png 1624w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4-300x177.png 300w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4-1024x605.png 1024w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4-768x454.png 768w, https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2022\/03\/app_collab_4-1536x908.png 1536w\" alt=\"\" width=\"734\" height=\"434\" \/><\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2021\/12\/livro-arquitetura-corporativa-2.png\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/arquiteturacorporativa.online\/wp-content\/uploads\/2021\/12\/livro-arquitetura-corporativa-2.png\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; color: #4c4c4c; line-height: 1.0; font-family: Lufga; margin-bottom: 10px;\">Modelando 'colabora\u00e7\u00f5es' entre aplica\u00e7\u00f5es<\/p>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Lufga; margin-bottom: 10px;\">Manual do Arquiteto Corporativo<\/p>\r\n<\/p>\n<p>A modelagem de colabora\u00e7\u00f5es entre aplica\u00e7\u00f5es \u00e9 atividade essencial na pr\u00e1tica da arquitetura corporativa. Neste cap\u00edtulo, apresento ideias e conceitos que colaboram nessa atividade.<\/p>\n<p>\r\n<p><a class=\"botao-livro\" href=\"https:\/\/arquiteturacorporativa.online\/modelando-colaboracoes-entre-aplicacoes-capitulo-7-v1-0\/\" target=\"_blank\" rel=\"noopener\">Ler cap\u00edtulo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Explicitando as rela\u00e7\u00f5es de um software com outros usando C4<\/h2>\n<p>Nos \u00faltimos anos, uma nota\u00e7\u00e3o tem ganhado destaque para documenta\u00e7\u00e3o de relacionamentos. Trata-se do modelo C4, idealizado por Simon Brown.<\/p>\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>O modelo C4 \u00e9 uma t\u00e9cnica de nota\u00e7\u00e3o gr\u00e1fica enxuta para modelar a arquitetura de sistemas de software. \u00c9 baseado em uma decomposi\u00e7\u00e3o estrutural de um sistema em cont\u00eaineres e componentes e depende de t\u00e9cnicas de modelagem existentes, como a Unified Modeling Language (UML) ou Entity Relation Diagrams (ERD) para a decomposi\u00e7\u00e3o mais detalhada dos blocos de constru\u00e7\u00e3o arquitet\u00f4nicos.<\/em><\/p>\n<p>\r\n<p><strong>Wikipedia<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\nEm uma primeira an\u00e1lise da arquitetura de um software podemos assumir que este, em um contexto amplo, \u00e9 um componente, com determinadas responsabilidades, que se relaciona com outros componentes, os demais agentes, tamb\u00e9m com responsabilidades mais ou menos delimitadas. Essa \u00e9 a proposta do diagrama de contextos, o primeiro n\u00edvel do modelo C4\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1189 \" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/context-1024x858.png\" alt=\"\" width=\"582\" height=\"487\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/context-1024x858.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/context-300x251.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/context-768x644.png 768w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/context.png 1236w\" sizes=\"(max-width: 582px) 100vw, 582px\" \/><\/p>\n<hr \/>\n<p>O prop\u00f3sito dessa an\u00e1lise \u00e9 revelar quem s\u00e3o as &#8220;pessoas&#8221; (usu\u00e1rios, agentes, pap\u00e9is ou personas) e outros artefatos (depend\u00eancias externas) que est\u00e3o diretamente conectadas com o software que estamos analisando. Geralmente, estes outros sistemas est\u00e3o fora do escopo prim\u00e1rio.<\/p>\nAgentes externos podem operar como gatilhos para opera\u00e7\u00f5es no software ou como fontes de dados. Outras vezes, ser\u00e3o &#8220;acionados&#8221; pelo sistemas que estamos analisando ou ir\u00e3o ser atualizados por este. Finalmente, podem ser utilit\u00e1rios realizando opera\u00e7\u00f5es de alta especificidade ou complexidade tecnol\u00f3gica (como o envio massivo de e-mails).\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> De todas as pr\u00e1ticas associadas a arquitetura de software, a mais fundamental \u00e9 a explicita\u00e7\u00e3o das integra\u00e7\u00f5es que precisam ser suportadas por um sistema de software.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p><strong>Embora esta seja uma an\u00e1lise muito simples, na pr\u00e1tica, sua execu\u00e7\u00e3o tem se relevando \u00fatil e desafiadora.<\/strong> Por incr\u00edvel que pare\u00e7a, \u00e9 dif\u00edcil para as organiza\u00e7\u00f5es relacionar quais s\u00e3o os principais \u201cacionadores\u201d e \u201cacionados\u201d para os diversos sistemas. Tamb\u00e9m costuma ser bem dif\u00edcil criar uma descri\u00e7\u00e3o sucinta sobre o que um sistema faz ou deveria fazer.<\/p>\n<div class=\"nota-youtube\">\r\n<table class=\"tabelayoutube\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-youtube-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/youtube.png\" alt=\"\" width=\"80\" height=\"80\" \/><\/td>\r\n<td class=\"nota-youtube-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/youtube.png\" alt=\"\" width=\"80\" height=\"80\" \/>\r\n<p style=\"font-size: 24px; font-weight: bold; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Visualising software architecture with the C4 model<\/p>\r\nNa palestra de Simon Brown na AOTB 2019, ele explora a comunica\u00e7\u00e3o visual da arquitetura de software com base em uma d\u00e9cada de experi\u00eancias trabalhando com equipes de desenvolvimento de software grandes e pequenas em todo o mundo.\r\n<p><a class=\"botao-youtube\" href=\"https:\/\/www.youtube.com\/watch?v=x2-rSnhpw0g\" target=\"_blank\" rel=\"noopener\" style=\"margin-top: 20px;\">Acessar v\u00eddeo<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Representando relacionamentos usando C4<\/h2>\n<p>O n\u00edvel mais alto de abstra\u00e7\u00e3o proposto pelo modelo C4 prop\u00f5e a elabora\u00e7\u00e3o de diagramas de contexto, muito semelhantes ao que indicamos aqui. J\u00e1 no segundo n\u00edvel, o diagrama de cont\u00eaineres, &#8220;explode&#8221; o sistema que sendo analisado para revelar sua estrutura.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1235\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/bigbankplc-Containers-1024x722-1.png\" alt=\"\" width=\"849\" height=\"599\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/bigbankplc-Containers-1024x722-1.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/bigbankplc-Containers-1024x722-1-300x212.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/bigbankplc-Containers-1024x722-1-768x542.png 768w\" sizes=\"(max-width: 849px) 100vw, 849px\" \/><\/p>\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>O diagrama do cont\u00eaineres mostra a forma de alto n\u00edvel da arquitetura do software e como as responsabilidades s\u00e3o distribu\u00eddas por ela. Tamb\u00e9m mostra as principais op\u00e7\u00f5es de tecnologia e como os cont\u00eaineres se comunicam. \u00c9 um diagrama simples e focado em tecnologia de alto n\u00edvel, \u00fatil para desenvolvedores de software e equipes de suporte\/opera\u00e7\u00f5es.<\/em><\/p>\n<p>\r\n<p><strong>Simon Brown<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>A elabora\u00e7\u00e3o do diagrama de cont\u00eaineres n\u00e3o \u00e9 tarefa trivial.<\/p>\n<p>Em sistemas muito grandes, ou legados, \u00e9 comum que n\u00e3o seja evidente a responsabilidade de cada cont\u00eainer (indicando claro acoplamento). Em sistemas novos ou em desenvolvimento, h\u00e1 uma tend\u00eancia de simplificar em demasia os cont\u00eaineres.<\/p>\n<p><em>O diagrama do cont\u00eaineres mostra a forma de alto n\u00edvel da arquitetura do software e como as responsabilidades s\u00e3o distribu\u00eddas por ela. Tamb\u00e9m mostra as principais op\u00e7\u00f5es de tecnologia e como os cont\u00eaineres se comunicam. \u00c9 um diagrama simples e focado em tecnologia de alto n\u00edvel, \u00fatil para desenvolvedores de software e equipes de suporte\/opera\u00e7\u00f5es.<\/em><\/p>\n<p>[\/sc]<\/p>\n<p><strong>O maior ganho que tenho percebido na elabora\u00e7\u00e3o desse diagrama est\u00e1 na explicita\u00e7\u00e3o da complexidade dos sistemas, geralmente causada por um projeto descuidado ou pela evolu\u00e7\u00e3o descontrolada.<\/strong> Para sistemas novos, esse diagrama antecipa discuss\u00f5es que ficariam relegadas a momentos posteriores e que, se feitas no momento certo, poderiam evitar dores de cabe\u00e7a.<\/p>\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/d2sofvawe08yqg.cloudfront.net\/visualising-software-architecture\/s_hero2x?1641768162\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/d2sofvawe08yqg.cloudfront.net\/visualising-software-architecture\/s_hero2x?1641768162\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Software Architecture for Developers - Volume 2<\/p>\r\nSimon Brown explica nos dois volumes de &#8220;Software Architecture for Developers&#8221; ideias essenciais relacionadas a arquitetura de software e a utiliza\u00e7\u00e3o do modelo C4.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/leanpub.com\/visualising-software-architecture\" target=\"_blank\" rel=\"noopener\">Acessar livro<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Modelando depend\u00eancias de microsservi\u00e7os com C4<\/h2>\n<p>Estrat\u00e9gias arquiteturais baseadas em microsservi\u00e7os representam desafios para mapeamento de depend\u00eancias. O problema \u00e9 que, embora a rela\u00e7\u00e3o entre dois microsservi\u00e7os se assemelhe a rela\u00e7\u00e3o de qualquer outro n\u00edvel de sistema, a granularidade dificulta visualiza\u00e7\u00e3o e entendimento.<\/p>\n<p>Simon Brown, criador do modelo C4 ensina que h\u00e1 duas abordagens comuns para modelagem de microsservi\u00e7os com o modelo C4:<\/p>\n<ul>\n<li>Se o sistema de software depende de uma s\u00e9rie de microsservi\u00e7os que est\u00e3o fora do controle do time, devemos modelar esses microsservi\u00e7os como sistemas de software externos, representando o time.<\/li>\n<li>Se uma \u00fanica equipe possui v\u00e1rios &#8220;microsservi\u00e7os&#8221;, devemos modelar cada coisa implant\u00e1vel como um cont\u00eainer.<\/li>\n<\/ul>\n<hr \/>\n<p>O mesmo \u00e9 verdadeiro para fun\u00e7\u00f5es sem servidor\/lambdas\/etc. Devemos trat\u00e1-los como sistemas de software ou cont\u00eaineres com base na propriedade.<\/p>\n\u00c9 curioso que a forma como modelamos integra\u00e7\u00f5es tem rela\u00e7\u00e3o direta com a forma como times est\u00e3o estruturados, exatamente em conformidade com a lei de Conway.\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>Se aceitamos que as implica\u00e7\u00f5es da lei de Conway s\u00e3o reais, ent\u00e3o, tamb\u00e9m precisamos aceitar que qualquer um que tome decis\u00f5es sobre o design dos times de engenharia influencia fortemente a arquitetura do software (&#8230;) Se temos gerentes decidindo que servi\u00e7os ser\u00e3o desenvolvidos, por quais times, implicitamente, temos gerentes decidindo a arquitetura dos sistemas.<\/em><\/p>\n<p>\r\n<p><strong>Skelton<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Principais abordagens para integra\u00e7\u00e3o entre aplica\u00e7\u00f5es<\/h2>\nAo longo dos anos, a integra\u00e7\u00e3o entre sistemas \u00e9 implementada utilizando uma das seguintes cinco abordagens:\n<hr \/>\n<ol>\n<li><strong>Troca de arquivos\u00a0<\/strong>&#8211; Onde uma ou mais aplica\u00e7\u00f5es escrevem arquivos em um determinado formato que ser\u00e3o, posteriormente, processados por outra. Al\u00e9m do formato, \u00e9 necess\u00e1rio estabelecer regras para como nomear os arquivos e onde estes devem ser salvos.<\/li>\n<li><strong>Banco de dados compartilhado\u00a0<\/strong>&#8211; com m\u00faltiplas aplica\u00e7\u00f5es compartilhando um mesmo esquema, localizado em um \u00fanico banco (que pode ser relacional ou n\u00e3o). N\u00e3o h\u00e1, de fato, duplica\u00e7\u00e3o de dados e tampouco transfer\u00eancias.<\/li>\n<li><strong>Replica\u00e7\u00e3o eventual, <\/strong>onde &#8220;motores de ETL&#8221; fazem cargas rotineiras de dados de determinadas fontes de dados, sem crit\u00e9rio objetivo de sele\u00e7\u00e3o.<\/li>\n<li><strong>Acionamento remoto<\/strong>, onde uma aplica\u00e7\u00e3o exp\u00f5e algumas de suas funcionalidades, geralmente atrav\u00e9s de servi\u00e7os e protocolos abertos, de forma que estas possam ser acessadas por outra aplica\u00e7\u00e3o. A comunica\u00e7\u00e3o \u00e9 geralmente s\u00edncrona.<\/li>\n<li><strong>Mensageria<\/strong>, onde uma aplica\u00e7\u00e3o publica mensagens para um canal comum para serem processadas por outras aplica\u00e7\u00f5es que &#8220;escutam&#8221; ativamente o canal.<\/li>\n<\/ol>\n<hr \/>\n<p>Tamb\u00e9m h\u00e1 as integra\u00e7\u00f5es manuais, ou seja, pelo &#8220;estagi\u00e1rio digitador&#8221; que, partindo de um relat\u00f3rio, gera entradas em sistemas.<\/p>\nMuito embora todas as cinco abordagens resolvam essencialmente os mesmos problemas, cada uma delas tem vantagens e desvantagens. N\u00e3o raro, ali\u00e1s, mais de uma abordagem \u00e9 empregada em um software.\n<div class=\"nota-livro\">\r\n<table class=\"tabelalivro\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-livro-coluna-1\" valign=\"top\"><img decoding=\"async\" src=\"https:\/\/m.media-amazon.com\/images\/I\/51pcuI4QqML.jpg\" alt=\"\" width=\"150\" \/><\/td>\r\n<td class=\"nota-livro-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"https:\/\/m.media-amazon.com\/images\/I\/51pcuI4QqML.jpg\" alt=\"\" width=\"150\" \/>\r\n<p style=\"font-size: 20px; font-weight: bold; color: #4c4c4c; line-height: 1.1; font-family: Montserrat; margin-bottom: 10px;\">Enterprise Integration Patterns<\/p>\r\n<i>Enterprise Integration Patterns<\/i>\u00a0\u00e9 um verdadeiro cl\u00e1ssico entre livros de arquitetura de software. Ele cont\u00e9m um cat\u00e1logo com 65 padr\u00f5es de integra\u00e7\u00e3o usando mensageria.<\/p>\n<hr \/>\n<p>Sendo uma obra com mais de 10 anos, o livro demonstra algum cansa\u00e7o em seus exemplos de c\u00f3digo. Mesmo assim, trata-se da melhor refer\u00eancia dispon\u00edvel sobre o tema.\r\n<p><a class=\"botao-livro\" href=\"https:\/\/www.amazon.com.br\/Enterprise-Integration-Patterns-Designing-Addison-Wesley-ebook\/dp\/B007MQLL4E\" target=\"_blank\" rel=\"noopener\">Acessar livro<\/a><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Desafios comuns em integra\u00e7\u00f5es<\/h2>\nTodas as integra\u00e7\u00f5es tendem a enfrentar os seguintes desafios comuns:\n<hr \/>\n<ol>\n<li><strong>Rede n\u00e3o confi\u00e1vel e lenta<\/strong> &#8211; Como bem descrito pelas &#8220;oito fal\u00e1cias da computa\u00e7\u00e3o distribu\u00edda&#8221;, a rede n\u00e3o pode ser assumida como confi\u00e1vel, tampouco livre de penalidades. N\u00e3o \u00e9 raro que aplica\u00e7\u00f5es que precisam ser integradas est\u00e3o operando geograficamente distantes.<\/li>\n<li><strong>Toda aplica\u00e7\u00e3o \u00e9 diferente (e \u00fanica)<\/strong> &#8211; Solu\u00e7\u00f5es de integra\u00e7\u00e3o precisam transmitir informa\u00e7\u00f5es entre sistemas escritos em linguagens de programa\u00e7\u00e3o, plataformas operacionais e formatos diferentes. Nem sempre, essa passagem \u00e9 f\u00e1cil.<\/li>\n<li><strong>Mudan\u00e7a \u00e9 inevit\u00e1vel\u00a0<\/strong>&#8211; Aplica\u00e7\u00f5es sempre mudam ao longo do tempo (ali\u00e1s, esse \u00e9 o grande desafio das disciplinas de engenharia). Qualquer solu\u00e7\u00e3o de integra\u00e7\u00e3o precisa permanecer alinhada com essas mudan\u00e7as.<\/li>\n<\/ol>\n<hr \/>\n<p>As falhas da rede implicam em adotar diversas estrat\u00e9gias, incluindo chamadas idempotentes,\u00a0<em>handshakes<\/em>, pol\u00edticas de retentativa e\u00a0<em>circuit-breakers<\/em>.<\/p>\n<p>Para integra\u00e7\u00f5es com servi\u00e7os externos, surgem quest\u00f5es relacionadas a versionamento de APIs e continuidades.<\/p>\n<h2>Exemplo de discuss\u00e3o arquitetural para integra\u00e7\u00e3o de dados<\/h2>\n<p><strong>Como fazer com que duas ou mais aplica\u00e7\u00f5es (potencialmente servi\u00e7os ou microsservi\u00e7os) que utilizam os dados de um determinado tipo de entidade, operem de forma <del>eventualmente<\/del>\u00a0consistente, \u00a0com o m\u00ednimo de acoplamento, sem sobrecarregar a rede e sem introduzir pontos cr\u00edticos de falha?<\/strong><\/p>\n<p><b>Geralmente, fazer com que todas as aplica\u00e7\u00f5es utilizem o mesmo banco de dados n\u00e3o \u00e9 a melhor escolha.<\/b>\u00a0Afinal, essa decis\u00e3o faria com que todos os sistemas operassem de maneira extremamente acoplada tornando a evolu\u00e7\u00e3o mais lenta. Al\u00e9m disso, o banco em si se converteria em um ponto cr\u00edtico de falha. Por outro lado, trata-se da solu\u00e7\u00e3o com o menor custo de desenvolvimento e parece \u201cOK\u201d em cen\u00e1rios onde o <em>schema<\/em> est\u00e1 est\u00e1vel e o time de desenvolvimento das aplica\u00e7\u00f5es seja o mesmo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1277 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img0.png\" alt=\"\" width=\"364\" height=\"249\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img0.png 606w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img0-300x205.png 300w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/p>\n<p><b>Desenvolver um servi\u00e7o que opere como \u201cfonte da verdade\u201d para um determinado tipo de entidade, sendo consumido por todos os demais servi\u00e7os, tamb\u00e9m n\u00e3o parece ser uma estrat\u00e9gia muito inteligente.<\/b>\u00a0Afinal, o acoplamento n\u00e3o seria em fun\u00e7\u00e3o do <em>schema<\/em> do banco de dados, mas em fun\u00e7\u00e3o do contrato do servi\u00e7o. Al\u00e9m disso, o servi\u00e7o tamb\u00e9m \u00a0seria um ponto cr\u00edtico de falhas (sofrendo instabilidades, comprometeria potencialmente o sistema como um todo). De qualquer forma, seria \u201cOK\u201d caso o volume de consumo fosse pequeno.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1278 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img1.png\" alt=\"\" width=\"364\" height=\"249\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img1.png 606w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img1-300x205.png 300w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/p>\n<p><b>A melhor estrat\u00e9gia parece ser \u00a0fazer com que cada servi\u00e7o mantenha uma c\u00f3pia dos dados que precisa para funcionar, pelo menos para as opera\u00e7\u00f5es on-line.<\/b>\u00a0Dessa forma, seria necess\u00e1rio mais espa\u00e7o para armazenamento (o que custa pouco), mas n\u00e3o haveria implica\u00e7\u00f5es com instabilidades externas (sem pontos de falha) e n\u00e3o haveria sobrecarga desnecess\u00e1ria na estrutura, principalmente se a frequ\u00eancia de modifica\u00e7\u00e3o dos dados \u00e9 pequena. De qualquer forma, trata-se da abordagem com maior complexidade associada e complexidade \u00e9 custo.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1279 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img3.png\" alt=\"\" width=\"364\" height=\"387\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img3.png 646w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/img3-283x300.png 283w\" sizes=\"(max-width: 364px) 100vw, 364px\" \/><\/p>\n<p>&nbsp;<\/p>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Lembre-se sempre de ponderar a respeito de risco e custo na sele\u00e7\u00e3o de solu\u00e7\u00f5es arquiteturais. A &#8220;melhor&#8221; solu\u00e7\u00e3o \u00e9 <strong>sempre<\/strong> contextual.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>Integrando com sistemas legados<\/h2>\n<p>Sistemas legados eventualmente n\u00e3o fornecem interfaces adequadas para integra\u00e7\u00e3o. A sa\u00edda, frequentemente, passa pela ado\u00e7\u00e3o de &#8220;interfaces adaptadoras&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3919 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/legacy_interface.png\" alt=\"\" width=\"575\" height=\"70\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/legacy_interface.png 1046w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/legacy_interface-300x37.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/legacy_interface-1024x125.png 1024w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/legacy_interface-768x94.png 768w\" sizes=\"(max-width: 575px) 100vw, 575px\" \/><\/p>\n<p>Eventualmente, a solu\u00e7\u00e3o poder\u00e1 ser uma API preparada para atender demandas de sistemas modernos, de maneira &#8220;reativa&#8221;.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-3920 aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/CDC.png\" alt=\"\" width=\"539\" height=\"70\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/CDC.png 986w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/CDC-300x39.png 300w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/CDC-768x100.png 768w\" sizes=\"(max-width: 539px) 100vw, 539px\" \/><\/p>\n<p>A interface adaptadora tamb\u00e9m poder\u00e1 ser &#8220;ativa&#8221;, &#8220;escutando&#8221; mudan\u00e7as de estado no legado e &#8220;encaminhando&#8221; para sistemas modernos, de maneira pr\u00f3-ativa.<\/p>\n<p><strong>Raramente valer\u00e1 a pena modificar &#8220;o fonte&#8221; de um sistema legado com base de c\u00f3digo antiga e desenvolvida em tecnologia ultrapassada.<\/strong><\/p>\n<div class=\"nota-insight\">\r\n<table class=\"tabelainsight\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img loading=\"lazy\" decoding=\"async\" class=\"img-insight\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img loading=\"lazy\" decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/03\/ico-lamp-2.png\" alt=\"\" width=\"70\" height=\"70\" \/> Ao realizar integra\u00e7\u00f5es com sistemas legados, considere desenvolver &#8220;interfaces adaptadoras&#8221;.<\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<h2>A lei de Hyrum<\/h2>\n<strong>Interessante observar que, na pr\u00e1tica, nem todas as integra\u00e7\u00f5es de um software nascem com a anu\u00eancia do time que o desenvolve.<\/strong> N\u00e3o raro, relacionamentos s\u00e3o estabelecidos com base em caracter\u00edsticas n\u00e3o documentadas de aplica\u00e7\u00f5es ocasionando em dificuldades para a evolu\u00e7\u00e3o. Essa realidade \u00e9 retratada por <a href=\"https:\/\/twitter.com\/hyrumwright\">Hyrum Wright<\/a>, engenheiro da Google, em uma <a href=\"https:\/\/www.hyrumslaw.com\/\">\u201clei\u201d de engenharia de software que leva seu nome<\/a>.\n<div class=\"nota-alerta\">\r\n<table class=\"tabelaalerta\" style=\"width: 100%;\">\r\n<tbody>\r\n<tr>\r\n<td class=\"nota-coluna-1\" valign=\"top\"><img decoding=\"async\" class=\"img-citacao\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/><\/td>\r\n<td class=\"nota-coluna-2\"><img decoding=\"async\" class=\"nota-img\" src=\"\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/11\/ico-citacao-2.png\" alt=\"\" width=\"60\" height=\"60\" \/> <\/p>\n<p><em>Com um n\u00famero suficiente de usu\u00e1rios, n\u00e3o importa o que estiver acertado em contrato: todos os comportamentos observ\u00e1veis de um sistema ser\u00e3o premissas para funcionamento de outros artefatos.<\/em><\/p>\n<p>\r\n<p><strong>Hyrum Wright<\/strong><\/p>\r\n<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\n<p>Tal realidade \u00e9 t\u00e3o frequente que foi &#8220;piada&#8221; no <a href=\"https:\/\/xkcd.com\/1172\/\">xkcd<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1222 size-full aligncenter\" src=\"https:\/\/elemarjr.com\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/workflow.png\" alt=\"\" width=\"278\" height=\"386\" srcset=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/workflow.png 278w, https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2021\/04\/workflow-216x300.png 216w\" sizes=\"(max-width: 278px) 100vw, 278px\" \/><\/p>\n<p>Detalhes t\u00e9cnicos de implementa\u00e7\u00e3o como tempos de resposta, ordena\u00e7\u00e3o em resultados, esquemas de bancos de dados, mecanismos de persist\u00eancia e, at\u00e9 mesmo, detalhes de infraestrutura de uma aplica\u00e7\u00e3o servem, invariavelmente, como fundamento para desenvolvimento de processos e outros sistemas.<\/p>\n<p>Esquemas de banco de dados, por exemplo, mesmo que oficialmente privados e restritos aos times t\u00e9cnicos da organiza\u00e7\u00e3o desenvolvedora, s\u00e3o frequentemente utilizados para desenvolvimento de mecanismos de integra\u00e7\u00e3o.<\/p>\n<strong>Quanto maior o n\u00famero de usu\u00e1rios de um software, maiores s\u00e3o as possibilidades de clientes precisarem permanecer em vers\u00f5es antigas.<i class=\"i-twitter\"><\/i>\u00a0<\/strong>Afinal, estes clientes poder\u00e3o ter constru\u00eddo processos e ferramentas usando como base comportamentos do sistema que n\u00e3o foram preservados em vers\u00f5es mais novas. A consequ\u00eancia direta disso \u00e9 o aumento dos custos da empresa desenvolvedora pela necessidade de manter suporte a vers\u00f5es legadas, mesmo sem gerar valor novo.\n<hr \/>\n<h2>Toda grande jornada tem um primeiro passo\u2026<\/h2>\n<p><strong>As decis\u00f5es de design que se relacionam com a arquitetura garantem o atendimento dos objetivos do neg\u00f3cio, respeitando restri\u00e7\u00f5es e atingindo atributos de qualidade.\u00a0<\/strong>N\u00e3o raro, todos estes elementos tem rela\u00e7\u00e3o direta com os relacionamentos do software que est\u00e1 sendo arquitetado no ambiente que ir\u00e1 operar.<\/p>\n<p><strong>Quanto antes os respons\u00e1veis pela elabora\u00e7\u00e3o da arquitetura desenvolverem familiaridade com as integra\u00e7\u00f5es que ir\u00e3o ser suportadas, maiores as chances de sucesso!<\/strong> Por isso, a recomenda\u00e7\u00e3o \u00e9 explicitar essas integra\u00e7\u00f5es no in\u00edcio do esfor\u00e7o de desenvolvimento. Al\u00e9m disso, garantir que os artefatos de documenta\u00e7\u00e3o gerados se mantenham atualizados.<\/p>\n<p>Explicitar as integra\u00e7\u00f5es do software s\u00e3o uma boa forma de integrar novos desenvolvedores ao time de trabalho.<\/p>\n<h2>\/\/ TODO<\/h2>\n<p>Antes de avan\u00e7ar para o pr\u00f3ximo cap\u00edtulo recomendo as seguintes atividades:<\/p>\n<ul>\n<li>Utilizando o modelo C4, desenvolva representa\u00e7\u00f5es do software que est\u00e1 desenvolvendo nos n\u00edveis de contexto e cont\u00eainer.<\/li>\n<li>Pondere sobre quais abordagens de integra\u00e7\u00e3o est\u00e3o sendo utilizadas atualmente. Quais as &#8220;dores&#8221; percebidas nas escolhas feitas?<\/li>\n<li>Reflita sobre os impactos da organiza\u00e7\u00e3o dos times em sua organiza\u00e7\u00e3o na forma como as integra\u00e7\u00f5es s\u00e3o feitas<\/li>\n<li>Reflita sobre a lei de Hyrum e o software que est\u00e1 desenvolvendo. H\u00e1 ind\u00edcios de integra\u00e7\u00f5es desenvolvidas &#8220;apesar&#8221; das especifica\u00e7\u00f5es?<\/li>\n<\/ul>\n","protected":false},"featured_media":6070,"parent":0,"comment_status":"open","ping_status":"closed","template":"","url":[72],"sessoes":[57],"apendices":[],"capitulos":[14],"class_list":["post-3873","volume-1","type-volume-1","status-publish","has-post-thumbnail","hentry","url-permanente","sessoes-secao-1","capitulos-capitulo-1-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software\" \/>\n<meta property=\"og:description\" content=\"Dificilmente um software conseguir\u00e1 atender sozinho todas as demandas de seu contexto de opera\u00e7\u00e3o. Por essa raz\u00e3o, para cumprir, de fato, os objetivos do neg\u00f3cio, a arquitetura de um software dever\u00e1 contemplar, al\u00e9m dele pr\u00f3prio, a rela\u00e7\u00e3o com os demais &#8220;integrantes sist\u00eamicos&#8221;, delimitando responsabilidades e relacionamentos. Sabendo\u00a0que, por exemplo, um software digitaliza ou suporta a [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/\" \/>\n<meta property=\"og:site_name\" content=\"Manual do Arquiteto de Software\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/eximiaco\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-27T20:21:33+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03-1024x683.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"683\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@eximiaco\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/\",\"name\":\"Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software\",\"isPartOf\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png\",\"datePublished\":\"2023-10-23T13:48:07+00:00\",\"dateModified\":\"2026-04-27T20:21:33+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Volume 1\",\"item\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Cap 1.2 Integrando sistemas de software\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"name\":\"Manual do Arquiteto de Software\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization\",\"name\":\"EximiaCo\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"contentUrl\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg\",\"width\":150,\"height\":150,\"caption\":\"EximiaCo\"},\"image\":{\"@id\":\"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/facebook.com\/eximiaco\",\"https:\/\/x.com\/eximiaco\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/","og_locale":"pt_BR","og_type":"article","og_title":"Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software","og_description":"Dificilmente um software conseguir\u00e1 atender sozinho todas as demandas de seu contexto de opera\u00e7\u00e3o. Por essa raz\u00e3o, para cumprir, de fato, os objetivos do neg\u00f3cio, a arquitetura de um software dever\u00e1 contemplar, al\u00e9m dele pr\u00f3prio, a rela\u00e7\u00e3o com os demais &#8220;integrantes sist\u00eamicos&#8221;, delimitando responsabilidades e relacionamentos. Sabendo\u00a0que, por exemplo, um software digitaliza ou suporta a [&hellip;]","og_url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/","og_site_name":"Manual do Arquiteto de Software","article_publisher":"https:\/\/facebook.com\/eximiaco","article_modified_time":"2026-04-27T20:21:33+00:00","og_image":[{"width":1024,"height":683,"url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03-1024x683.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@eximiaco","twitter_misc":{"Est. tempo de leitura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/","name":"Cap 1.2 Integrando sistemas de software - Manual do Arquiteto de Software","isPartOf":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website"},"primaryImageOfPage":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage"},"thumbnailUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png","datePublished":"2023-10-23T13:48:07+00:00","dateModified":"2026-04-27T20:21:33+00:00","breadcrumb":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#primaryimage","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2023\/10\/ChatGPT-Image-27-de-abr.-de-2026-17_21_03.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/integrando-sistemas-de-software\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/"},{"@type":"ListItem","position":2,"name":"Volume 1","item":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/volume-1\/"},{"@type":"ListItem","position":3,"name":"Cap 1.2 Integrando sistemas de software"}]},{"@type":"WebSite","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#website","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","name":"Manual do Arquiteto de Software","description":"","publisher":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#organization","name":"EximiaCo","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/","url":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","contentUrl":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-content\/uploads\/2022\/04\/simbolo-eximiaco.jpg","width":150,"height":150,"caption":"EximiaCo"},"image":{"@id":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/eximiaco","https:\/\/x.com\/eximiaco"]}]}},"_links":{"self":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1\/3873","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/volume-1"}],"about":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/types\/volume-1"}],"replies":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/comments?post=3873"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media\/6070"}],"wp:attachment":[{"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/media?parent=3873"}],"wp:term":[{"taxonomy":"url","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/url?post=3873"},{"taxonomy":"sessoes","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/sessoes?post=3873"},{"taxonomy":"apendices","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/apendices?post=3873"},{"taxonomy":"capitulos","embeddable":true,"href":"https:\/\/elemarjr.com\/livros\/arquiteturadesoftware\/wp-json\/wp\/v2\/capitulos?post=3873"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}