{"id":1169,"date":"2012-11-08T01:25:19","date_gmt":"2012-11-08T04:25:19","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=1169"},"modified":"2012-11-09T08:19:06","modified_gmt":"2012-11-09T11:19:06","slug":"armadilhas-para-desenvolvedores-em-busca-do-componente-perdido","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=1169","title":{"rendered":"Armadilhas para desenvolvedores: em busca do componente perdido"},"content":{"rendered":"<p>O sonho de todo desenvolvedor \u00e9 a componentiza\u00e7\u00e3o, mas a partir de algumas conversas das quais participo me pergunto: ser\u00e1 que as pessoas\u00a0<strong>realmente<\/strong> sabem <strong>do qu\u00ea<\/strong> est\u00e3o falando? Componentes aniquilam a repeti\u00e7\u00e3o desnecess\u00e1ria, e \u00a0ing\u00eanuamente pensando, nada poderia dar errado, certo?<\/p>\n<h2>Definindo<\/h2>\n<p>Uma defini\u00e7\u00e3o inicial de <strong>componente de software<\/strong> \u00e9: <em>c\u00f3digo que implementa determinada funcionalidade visando ser aplicado em diferentes contextos (sistemas) sem a necessidade de ser alterado<\/em>. Lendo-a pela primeira vez temos a falsa impress\u00e3o de que estamos lidando com algo razoavelmente simples de ser obtido. Sendo assim vou ir um pouco al\u00e9m expondo quais os atributos que um componente\u00a0deve ter:<\/p>\n<p><strong>Estabilidade:<\/strong> o componente possui um comportamento que pode ser previsto por seus usu\u00e1rios. Para que isto ocorra faz-se necess\u00e1rio que seu c\u00f3digo seja maduro e, de prefer\u00eancia, imut\u00e1vel, mas sim estendido por seus clientes (<a href=\"https:\/\/devkico.itexto.com.br\/?p=1105\">fechado para modifica\u00e7\u00e3o, aberto para extens\u00e3o<\/a>). S\u00f3 tem um problema: no universo tudo muda (certo <a href=\"http:\/\/pt.wikipedia.org\/wiki\/Heraclito_de_%C3%89feso\">Her\u00e1clito<\/a>?).<\/p>\n<p><strong>Versionamento: <\/strong>a solu\u00e7\u00e3o para o problema da mutabilidade \u00e9 o versionamento. Tudo bem que os objetos se alterem com o tempo, mas em um momento espec\u00edfico estes est\u00e3o em um estado acabado. O usu\u00e1rio de um componente para poder prever o seu comportamento precisa de um intervalo de vers\u00f5es. Por exemplo: <em>sei que um certo recurso do MySQL possui determinado comportamento das vers\u00f5es 5.1 a 5.5<\/em>.<\/p>\n<p><strong>Plugabilidade:<\/strong> o componente deve fornecer algum tipo de interface que possibilite sua intera\u00e7\u00e3o com seus clientes e que explicite <strong>o qu\u00ea<\/strong> pode fazer.<\/p>\n<p><strong>Essencialidade:<\/strong> o componente deve representar a ess\u00eancia da funcionalidade que implementa. Por exemplo: um banco de dados que s\u00f3 permita persistir e pesquisar informa\u00e7\u00f5es m\u00e9dicas \u00e9 um componente de uso bastante restrito. Em contrapartida um SGBD relacional j\u00e1 pode ser usado em in\u00fameras situa\u00e7\u00f5es distintas. Problema: esta generalidade sozinha \u00e9 in\u00fatil sem saber aonde pode ser aplicada.<\/p>\n<p><strong>Contextualidade:<\/strong> aonde o componente pode ser aplicado. Uma regra de neg\u00f3cio, por exemplo, pode ser vista como um componente dentro de um sistema mas ser\u00e1 que tem uso fora deste? Normalmente n\u00e3o.<\/p>\n<p><strong>Isolabilidade:<\/strong> de nada adianta o nosso componente ser reaproveit\u00e1vel se n\u00e3o pudermos trata-lo de forma isolada. Este sempre deve poder ser substitu\u00eddo por outro (que vise o mesmo fim, l\u00f3gico) de tal modo que seus clientes n\u00e3o precisem ser muito modificados neste processo. Traduzindo: um componente n\u00e3o pode aumentar o acoplamento nos sistemas que o usam. Um componente cujo c\u00f3digo fonte foi alterado para um uso espec\u00edfico perde a sua capacidade de ser adotado em outras situa\u00e7\u00f5es.<\/p>\n<p>Como pode ser visto, um componente n\u00e3o \u00e9 algo f\u00e1cil de ser constru\u00eddo. Estamos lidando com uma criatura complexa e dif\u00edcil de ser encontrada. \u00c9 por isto que n\u00e3o me sinto \u00e0 vontade quando vejo este conceito representado por met\u00e1foras visuais como pe\u00e7as de quebra-cabe\u00e7a ou um mero cubo. Elas transmitem a id\u00e9ia de que estamos lidando com algo simples o que n\u00e3o \u00e9 o caso.<\/p>\n<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1175\" title=\"quickrete\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg\" alt=\"\" width=\"400\" height=\"400\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg 400w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete-150x150.jpg 150w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete-300x300.jpg 300w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/a>Finalmente uma defini\u00e7\u00e3o mais precisa:<\/p>\n<blockquote><p>Componente \u00e9 um software isolado e versionado que implemente a ess\u00eancia de uma funcionalidade e que possa ser reaplicado sem modifica\u00e7\u00f5es em diferentes contextos.<\/p><\/blockquote>\n<h2>Agora algumas armadilhas<\/h2>\n<h3>Componentiza\u00e7\u00e3o pr\u00e9via<\/h3>\n<p>\u00c9 um erro muito comum em f\u00e1bricas de software ou ambientes nos quais a press\u00e3o por alta produtividade esteja instalada. Os desenvolvedores s\u00e3o pressionados a escrever c\u00f3digo que possa ser usado no maior n\u00famero de situa\u00e7\u00f5es poss\u00edvel. Problema: normalmente tentam criar o componente antes que uma segunda situa\u00e7\u00e3o semelhante em que aquele c\u00f3digo pudesse ser reaproveitado surja. Sabe, \u00e9 importante lembrar um neg\u00f3cio aqui:<\/p>\n<blockquote><p>O reaproveitamento surge quando uma segunda, terceira ou en\u00e9sima situa\u00e7\u00e3o na qual uma mesma solu\u00e7\u00e3o pudesse ser aplicada aparece.<\/p><\/blockquote>\n<p>Por via de regra, costumo pensar na possibilidade de criar um componente s\u00f3 a partir da terceira ocorr\u00eancia. Dica: \u00e9 muito raro sua l\u00f3gica de neg\u00f3cio ter uso real fora do sistema em que surgiu. Normalmente os componentes mais bem sucedidos s\u00e3o aqueles que lidam com problemas mais b\u00e1sicos, como persist\u00eancia, ordena\u00e7\u00e3o, elementos visuais ou outra funcionalidade cuja aplica\u00e7\u00e3o seja transversal dentro da sua empresa.<\/p>\n<h3>D\u00ea a uma crian\u00e7a um martelo e o mundo se torna um prego<\/h3>\n<p>H\u00e1 um detalhe muito pouco mencionado a respeito dos componentes. Como estes implementam a essencialidade de uma funcionalidade, em seu uso puro, como solu\u00e7\u00e3o para o seu problema ser\u00e3o sempre o menor denominador comum. N\u00e3o \u00e9 raro em minhas consultorias chegar a empresas nas quais foi escolhido um componente que deva ser aplicado sempre que certo tipo de necessidade surja independente das suas caracter\u00edsticas intr\u00ednsecas.<\/p>\n<p>Um bom exemplo disto \u00e9 a ado\u00e7\u00e3o indiscriminada de um SGBD espec\u00edfico. Ser\u00e1 que sua empresa ao adotar apenas um SGBD consegue de forma produtiva e eficiente atender a todas as suas necessidades de persist\u00eancia e pesquisa? Outro exemplo: ser\u00e1 que usar apenas SOAP como estrat\u00e9gia de integra\u00e7\u00e3o atende todas as suas necessidades?<\/p>\n<p>Sim, \u00e9 importante ter um componente padr\u00e3o, mas melhor ainda \u00e9 ter um leque de op\u00e7\u00f5es para a mesma categoria \u00e0 qual o problema pertence. S\u00f3 pode ter uma op\u00e7\u00e3o em sua empresa? Pelo menos escolha algo flex\u00edvel ou f\u00e1cilmente expans\u00edvel (sinto cheiro de\u00a0<a href=\"https:\/\/devkico.itexto.com.br\/?p=1082\">fanboy<\/a> por a\u00ed).<\/p>\n<h3>Excesso de componentes levando a excesso de integra\u00e7\u00f5es<\/h3>\n<p>Componentes possuem uma verruga que se chama integra\u00e7\u00e3o. Como na ess\u00eancia deste conceito est\u00e1 a isolabilidade, sempre que um componente \u00e9 adotado, faz-se necess\u00e1ria a sua integra\u00e7\u00e3o no sistema cliente.<\/p>\n<p>Na maior parte dos casos a integra\u00e7\u00e3o \u00e9 via c\u00f3digo mesmo: o componente \u00e9 escrito na mesma linguagem ou j\u00e1 existe algum binding entre plataformas de desenvolvimento que permita seu uso de forma transparente. No entanto, nem sempre temos um mundo t\u00e3o simp\u00e1tico assim. Lembre-se que em integra\u00e7\u00f5es nas quais \u00e9 necess\u00e1rio executar transforma\u00e7\u00f5es sempre h\u00e1 perda de performance.<\/p>\n<h2>Conclus\u00f5es<\/h2>\n<p>N\u00e3o me assustaria se algum leitor comentasse no blog que sou contra a componentiza\u00e7\u00e3o. Isto seria um erro: sou a favor do componente pensado e n\u00e3o naquele cuja origem foi for\u00e7ada. Acredito que \u00a0devam surgir naturalmente a partir da experi\u00eancia da empresa pois s\u00f3 assim conseguem de fato agregar algo \u00e0 equipe.<\/p>\n<p>\u00c9 importante que o desenvolvedor tenha em mente os princ\u00edpios que mencionei para que caso precise lidar com um gerente ou cliente mal informado lhe pressionando na execu\u00e7\u00e3o desta &#8220;miss\u00e3o&#8221; possa expor as dificuldades inerentes ao problema e assim evitar ter mais retrabalho que reaproveitamento no final das contas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O sonho de todo desenvolvedor \u00e9 a componentiza\u00e7\u00e3o, mas a partir de algumas conversas das quais participo me pergunto: ser\u00e1 que as pessoas\u00a0realmente sabem do qu\u00ea est\u00e3o falando? Componentes aniquilam a repeti\u00e7\u00e3o desnecess\u00e1ria, e \u00a0ing\u00eanuamente pensando, nada poderia dar errado, certo? Definindo Uma defini\u00e7\u00e3o inicial de componente de software \u00e9: c\u00f3digo que implementa determinada funcionalidade [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[35,36],"tags":[],"class_list":["post-1169","post","type-post","status-publish","format-standard","hentry","category-armadilhas","category-desenvolvimento-de-software"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico<\/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:\/\/devkico.itexto.com.br\/?p=1169\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"O sonho de todo desenvolvedor \u00e9 a componentiza\u00e7\u00e3o, mas a partir de algumas conversas das quais participo me pergunto: ser\u00e1 que as pessoas\u00a0realmente sabem do qu\u00ea est\u00e3o falando? Componentes aniquilam a repeti\u00e7\u00e3o desnecess\u00e1ria, e \u00a0ing\u00eanuamente pensando, nada poderia dar errado, certo? Definindo Uma defini\u00e7\u00e3o inicial de componente de software \u00e9: c\u00f3digo que implementa determinada funcionalidade [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=1169\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2012-11-08T04:25:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2012-11-09T11:19:06+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2012\/11\/quickrete.jpg\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=1169\",\"name\":\"Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg\",\"datePublished\":\"2012-11-08T04:25:19+00:00\",\"dateModified\":\"2012-11-09T11:19:06+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=1169\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg\",\"width\":\"400\",\"height\":\"400\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=1169#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Armadilhas para desenvolvedores: em busca do componente perdido\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico","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:\/\/devkico.itexto.com.br\/?p=1169","og_locale":"pt_BR","og_type":"article","og_title":"Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico","og_description":"O sonho de todo desenvolvedor \u00e9 a componentiza\u00e7\u00e3o, mas a partir de algumas conversas das quais participo me pergunto: ser\u00e1 que as pessoas\u00a0realmente sabem do qu\u00ea est\u00e3o falando? Componentes aniquilam a repeti\u00e7\u00e3o desnecess\u00e1ria, e \u00a0ing\u00eanuamente pensando, nada poderia dar errado, certo? Definindo Uma defini\u00e7\u00e3o inicial de componente de software \u00e9: c\u00f3digo que implementa determinada funcionalidade [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=1169","og_site_name":"\/dev\/Kico","article_published_time":"2012-11-08T04:25:19+00:00","article_modified_time":"2012-11-09T11:19:06+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2012\/11\/quickrete.jpg"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=1169","url":"https:\/\/devkico.itexto.com.br\/?p=1169","name":"Armadilhas para desenvolvedores: em busca do componente perdido - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg","datePublished":"2012-11-08T04:25:19+00:00","dateModified":"2012-11-09T11:19:06+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=1169#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=1169"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=1169#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2012\/11\/quickrete.jpg","width":"400","height":"400"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=1169#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Armadilhas para desenvolvedores: em busca do componente perdido"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1169"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1169"}],"version-history":[{"count":26,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1169\/revisions"}],"predecessor-version":[{"id":1195,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/1169\/revisions\/1195"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}