{"id":719,"date":"2026-01-06T13:37:54","date_gmt":"2026-01-06T16:37:54","guid":{"rendered":"https:\/\/cahfelix.tech\/blog\/?p=719"},"modified":"2026-01-06T14:17:17","modified_gmt":"2026-01-06T17:17:17","slug":"composicao-de-dependencias-dependency-injection-sem-misterio","status":"publish","type":"post","link":"https:\/\/cahfelix.tech\/blog\/composicao-de-dependencias-dependency-injection-sem-misterio\/","title":{"rendered":"Composi\u00e7\u00e3o de Depend\u00eancias (Dependency Injection) sem mist\u00e9rio"},"content":{"rendered":"\n<p>Quando come\u00e7amos a estudar arquitetura e bons princ\u00edpios de c\u00f3digo, um termo aparece o tempo todo e quase sempre assusta:<\/p>\n\n\n\n<p>Composi\u00e7\u00e3o de Depend\u00eancias, tamb\u00e9m chamada de Dependency Injection. Mas a verdade \u00e9 que a ideia \u00e9 muito mais simples do que o nome sugere. Vamos por partes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">O problema que isso resolve<\/h2>\n\n\n\n<p>Imagine uma classe que faz tudo sozinha.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ela executa sua l\u00f3gica principal<\/li>\n\n\n\n<li>Cria objetos<\/li>\n\n\n\n<li>Decide quais implementa\u00e7\u00f5es usar<\/li>\n\n\n\n<li>Sabe detalhes que n\u00e3o deveria saber<\/li>\n<\/ul>\n\n\n\n<p>Esse tipo de classe funciona no come\u00e7o, mas rapidamente fica dif\u00edcil de manter, testar e evoluir. Qualquer mudan\u00e7a pequena vira um efeito domin\u00f3.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">A ideia central da composi\u00e7\u00e3o de depend\u00eancias<\/h2>\n\n\n\n<p>Composi\u00e7\u00e3o de depend\u00eancias significa que uma classe n\u00e3o cria aquilo de que ela precisa.<br><strong>Ela recebe pronto.<\/strong><\/p>\n\n\n\n<p>Ou seja, a classe foca apenas no seu papel, <strong>outra parte do sistema se preocupa em montar tudo e entregar para ela.<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">A analogia do caf\u00e9 \u2615<\/h2>\n\n\n\n<p>Agora um exemplo do dia a dia.<\/p>\n\n\n\n<p>Imagine uma cafeteira.<br>Ela faz caf\u00e9, essa \u00e9 a responsabilidade dela. Mas ela n\u00e3o deveria decidir qual caf\u00e9 comprar, nem ir ao mercado buscar \u00e1gua.<\/p>\n\n\n\n<p>Se a cafeteira tivesse que fazer isso, ela ficaria cheia de responsabilidades.<\/p>\n\n\n\n<p>O que acontece na composi\u00e7\u00e3o de depend\u00eancias algu\u00e9m de fora entrega o caf\u00e9 e a \u00e1gua para a cafeteira. A cafeteira s\u00f3 usa.<\/p>\n\n\n\n<p>Tudo isso chega pronto.<\/p>\n\n\n\n<p>No c\u00f3digo \u00e9 igual.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Sem composi\u00e7\u00e3o de depend\u00eancias<\/h2>\n\n\n\n<p>A classe cria tudo internamente.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ela escolhe a implementa\u00e7\u00e3o<\/li>\n\n\n\n<li>Fica acoplada a detalhes<\/li>\n\n\n\n<li>Fica dif\u00edcil trocar ou testar<\/li>\n<\/ul>\n\n\n\n<p>Esse tipo de c\u00f3digo costuma parecer simples no in\u00edcio, mas envelhece mal.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Com composi\u00e7\u00e3o de depend\u00eancias<\/h2>\n\n\n\n<p>A classe recebe suas depend\u00eancias de fora.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ela n\u00e3o sabe como foram criadas<\/li>\n\n\n\n<li>N\u00e3o se importa com detalhes<\/li>\n\n\n\n<li>S\u00f3 sabe que pode us\u00e1-las<\/li>\n<\/ul>\n\n\n\n<p>Isso deixa o c\u00f3digo mais limpo e mais flex\u00edvel.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Onde a composi\u00e7\u00e3o acontece<\/h2>\n\n\n\n<p>Muita gente acha que Dependency Injection \u00e9 coisa de framework, mas n\u00e3o \u00e9.<\/p>\n\n\n\n<p>A composi\u00e7\u00e3o pode acontecer<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No controller<\/li>\n\n\n\n<li>No use case<\/li>\n\n\n\n<li>Em uma factory<\/li>\n\n\n\n<li>No ponto mais externo da aplica\u00e7\u00e3o<\/li>\n\n\n\n<li>At\u00e9 mesmo em um new simples<\/li>\n<\/ul>\n\n\n\n<p>O importante n\u00e3o \u00e9 a ferramenta. \u00c9 a decis\u00e3o de design.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Benef\u00edcios reais<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00f3digo mais f\u00e1cil de entender<\/li>\n\n\n\n<li>Menos acoplamento<\/li>\n\n\n\n<li>Troca de implementa\u00e7\u00f5es sem dor<\/li>\n\n\n\n<li>Testes muito mais simples<\/li>\n\n\n\n<li>Evolu\u00e7\u00e3o mais segura<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Liga\u00e7\u00e3o direta com o SOLID<\/h2>\n\n\n\n<p>A composi\u00e7\u00e3o de depend\u00eancias \u00e9 a base pr\u00e1tica do D do <a href=\"https:\/\/cahfelix.tech\/blog\/solid-sem-misterio\/\" title=\"SOLID sem mist\u00e9rio\">SOLID<\/a>.<\/p>\n\n\n\n<p>Depender de abstra\u00e7\u00f5es e n\u00e3o de implementa\u00e7\u00f5es fica natural quando a classe n\u00e3o cria suas pr\u00f3prias depend\u00eancias.<\/p>\n\n\n\n<p>Ela apenas recebe.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Uma frase para guardar<\/h2>\n\n\n\n<p>Composi\u00e7\u00e3o de depend\u00eancias \u00e9 deixar a classe usar o que precisa, n\u00e3o criar o que precisa.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando come\u00e7amos a estudar arquitetura e bons princ\u00edpios de c\u00f3digo, um termo aparece o tempo todo e quase sempre assusta: Composi\u00e7\u00e3o de Depend\u00eancias, tamb\u00e9m chamada de Dependency Injection. Mas a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":727,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[],"class_list":["post-719","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arquitetura-de-software"],"aioseo_notices":[],"featured":false,"read_time":3,"_links":{"self":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/719","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/comments?post=719"}],"version-history":[{"count":6,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/719\/revisions"}],"predecessor-version":[{"id":725,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/posts\/719\/revisions\/725"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media\/727"}],"wp:attachment":[{"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/media?parent=719"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/categories?post=719"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cahfelix.tech\/blog\/wp-json\/wp\/v2\/tags?post=719"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}