{"id":168,"date":"2017-04-27T09:17:55","date_gmt":"2017-04-27T09:17:55","guid":{"rendered":"http:\/\/damrakoc.com\/blog\/?p=168"},"modified":"2020-01-17T15:50:37","modified_gmt":"2020-01-17T15:50:37","slug":"5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz","status":"publish","type":"post","link":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/","title":{"rendered":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z?"},"content":{"rendered":"<p id=\"83ae\" class=\"graf graf--p graf-after--p\">5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? Benim bunu a\u00e7\u0131klamam biraz zor olurdu. Ama <a class=\"markup--anchor markup--p-anchor\" href=\"http:\/\/stackoverflow.com\/questions\/1638919\/how-to-explain-dependency-injection-to-a-5-year-old\" target=\"_blank\" rel=\"nofollow noopener\" data-href=\"http:\/\/stackoverflow.com\/questions\/1638919\/how-to-explain-dependency-injection-to-a-5-year-old\">stackoverflow\u2019da<\/a>\u00a0verilen cevap ger\u00e7ekten m\u00fckemmel.<\/p>\n<blockquote>\n<p class=\"graf graf--p graf-after--p\">5 ya\u015f\u0131nda bir \u00e7ocuk bir\u015feyler almak i\u00e7in buzdolab\u0131na gider ise baz\u0131 problemlere neden olabilir. Buzdolab\u0131n\u0131n kapa\u011f\u0131 a\u00e7\u0131k kalabilir veya ebeveynlerinin istemedi\u011fi \u015feyleri alabilir. Hatta buzdolab\u0131n\u0131n d\u0131\u015f\u0131ndaki \u015feylere bakabilir veya buzdolab\u0131ndan tarihi ge\u00e7mi\u015f bir\u015feyi alabilir. \u00c7ocu\u011fun as\u0131l yapmas\u0131 gereken \u201c\u00d6\u011fle yeme\u011fim ile bir i\u00e7ece\u011fe ihtiyac\u0131m var\u201d gibi bir istekte bulunmakt\u0131r. \u00c7ocuk b\u00f6yle bir istekte bulundu\u011funda yeme\u011fini al\u0131r ve yer. (Nas\u0131l, nereden al\u0131cam diye d\u00fc\u015f\u00fcnmez, istemesi yeter\u00a0:))<\/p>\n<\/blockquote>\n<p class=\"graf graf--p graf-after--p\">Dependency Injection Frameworklerinin de mant\u0131\u011f\u0131 budur. E\u011fer bir nesneye ihtiyac\u0131n oldu\u011funda bunu sen olu\u015fturmazs\u0131n. Bu nesneye ihtiyac\u0131n oldu\u011funu s\u00f6ylersin. B\u00f6ylece framework o nesneyi olu\u015fturur ve sana getirir. Ve bu nesnenin ya\u015fam d\u00f6ng\u00fcs\u00fcnden framework sorumludur. B\u00f6ylece sen sadece neye ihtiyac\u0131m oldu\u011funu s\u00f6yler ve o nesneyi kullan\u0131rs\u0131n.<\/p>\n<p>Dependency&#8217;ler nelerdir:<\/p>\n<p>&#8211; kulland\u0131\u011f\u0131m\u0131z framework<br \/>\n&#8211; 3rd party k\u00fct\u00fcphaneler<br \/>\n&#8211; database<br \/>\n&#8211; file system<br \/>\n&#8211; email server<br \/>\n&#8211; servisler<br \/>\n&#8211; sistem kaynaklar\u0131 ( saat, tarih vs. )<br \/>\n&#8211; configuration<br \/>\n&#8211; new keyword&#8217;\u00fc ile olu\u015fturulan nesneler<br \/>\n&#8211; static metotlar<\/p>\n<p>burada framework&#8217;\u00fc stable dependency olarak de\u011ferlendiriyoruz \u00e7\u00fcnk\u00fc uygulamam\u0131n\u0131z\u0131n mod\u00fclerli\u011fini engellemiyor. Base class library her zaman i\u00e7in kullan\u0131ma a\u00e7\u0131k \u00e7\u00fcnk\u00fc uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in \u015fart. bunlar\u0131 stable dependency olarak de\u011ferlendirmemizin nedeni bizim i\u00e7in yaz\u0131lm\u0131\u015f, test edilmi\u015f olmalar\u0131, deterministik davran\u0131\u015f g\u00f6stermeleri, yerlerine ba\u015fka class&#8217;lar yerle\u015ftirmeyi d\u00fc\u015f\u00fcnmememiz. kulland\u0131\u011f\u0131m\u0131z k\u00fct\u00fcphaneler de \u00e7o\u011fu zaman(kendisi stable ise tabi) stable dependency olarak g\u00f6r\u00fcl\u00fcr.<\/p>\n<p>\u00f6te yandan listedeki di\u011fer t\u00fcm \u00f6\u011feler volatile dependency olarak s\u0131n\u0131fland\u0131r\u0131l\u0131r. bu dependency&#8217;lerin davran\u0131\u015flar\u0131 hi\u00e7bir zaman consumer nesne taraf\u0131ndan bilinemez bu y\u00fczden nesnenin test edilebilirli\u011fini engeller.<\/p>\n<p>\u00f6rne\u011fin saat ba\u015f\u0131 bir i\u015flem yapan bir s\u0131n\u0131f\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 nas\u0131l test edebiliriz? testi saatlerce \u00e7al\u0131\u015ft\u0131rmak pek iyi bir \u00e7\u00f6z\u00fcm olmaz. peki sistem saatini \u00f6\u011frenme i\u015flemini basit bir abstraction arkas\u0131na al\u0131rsak? consumer sadece bu abstraction&#8217;\u0131 bilirse test i\u00e7inde bunu bir test double ile de\u011fi\u015ftirmek \u00e7ok kolay.<br \/>\nb\u00f6ylece database, file system gibi dependency&#8217;leri ayn\u0131 y\u00f6ntemle y\u00f6netmek, her test i\u00e7in istedi\u011fimiz durumu yaratmak bizim elimizde. Bir di\u011fer \u00f6nemli nokta bu dependency&#8217;lerin new keyword&#8217;\u00fc ile olu\u015fturulmamas\u0131. new keyword&#8217;\u00fc hem abstraction&#8217;\u0131 implemente eden concrete class&#8217;a ayr\u0131 bir dependency yarat\u0131yor, hem de bir test double ile de\u011fi\u015ftirmeyi imkans\u0131z k\u0131l\u0131yor(public olarak kullanmak istemedi\u011fimizi varsayarsak).<\/p>\n<p>Bu noktada constructor injection yard\u0131m\u0131m\u0131za ko\u015fuyor. consumer, \u00a0constructor&#8217;\u0131nda ihtiya\u00e7 duydu\u011fu t\u00fcm dependency&#8217;leri parametre olarak belirtiyor. Art\u0131k bu nesnenin \u00e7al\u0131\u015fabilmesi i\u00e7in hangi dependency&#8217;lere ihtiyac\u0131 oldu\u011funu a\u00e7\u0131k\u00e7a g\u00f6rebiliyoruz. Belirtilen t\u00fcm parametreler concrete class yerine abstraction oldu\u011fu i\u00e7in bunlar\u0131 test double&#8217;lar\u0131 ile de\u011fi\u015ftirmek art\u0131k m\u00fcmk\u00fcn, class new keyword&#8217;\u00fc ile dependency&#8217;yi olu\u015fturdu\u011funda bu m\u00fcmk\u00fcn de\u011fildi. peki uygulama \u00fczerinde concrete class&#8217;lar\u0131 bu s\u0131n\u0131fa inject etmek kimin i\u015fi? cevap tabi ki DI\u00a0Container (Dagger)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? Benim bunu a\u00e7\u0131klamam biraz zor olurdu. Ama stackoverflow\u2019da\u00a0verilen cevap ger\u00e7ekten m\u00fckemmel. 5 ya\u015f\u0131nda bir \u00e7ocuk bir\u015feyler almak i\u00e7in buzdolab\u0131na gider ise baz\u0131 problemlere neden olabilir. Buzdolab\u0131n\u0131n kapa\u011f\u0131 a\u00e7\u0131k kalabilir veya ebeveynlerinin istemedi\u011fi \u015feyleri alabilir. Hatta buzdolab\u0131n\u0131n d\u0131\u015f\u0131ndaki \u015feylere bakabilir veya buzdolab\u0131ndan tarihi ge\u00e7mi\u015f bir\u015feyi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[],"class_list":["post-168","post","type-post","status-publish","format-standard","hentry","category-algorithms"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#039;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#039;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7\" \/>\n<meta property=\"og:description\" content=\"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? Benim bunu a\u00e7\u0131klamam biraz zor olurdu. Ama stackoverflow\u2019da\u00a0verilen cevap ger\u00e7ekten m\u00fckemmel. 5 ya\u015f\u0131nda bir \u00e7ocuk bir\u015feyler almak i\u00e7in buzdolab\u0131na gider ise baz\u0131 problemlere neden olabilir. Buzdolab\u0131n\u0131n kapa\u011f\u0131 a\u00e7\u0131k kalabilir veya ebeveynlerinin istemedi\u011fi \u015feyleri alabilir. Hatta buzdolab\u0131n\u0131n d\u0131\u015f\u0131ndaki \u015feylere bakabilir veya buzdolab\u0131ndan tarihi ge\u00e7mi\u015f bir\u015feyi [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/\" \/>\n<meta property=\"og:site_name\" content=\"Damra KO\u00c7\" \/>\n<meta property=\"article:published_time\" content=\"2017-04-27T09:17:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-01-17T15:50:37+00:00\" \/>\n<meta name=\"author\" content=\"damrakoc\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@damra_koc\" \/>\n<meta name=\"twitter:site\" content=\"@damra_koc\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"damrakoc\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/\",\"url\":\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/\",\"name\":\"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection '\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7\",\"isPartOf\":{\"@id\":\"http:\/\/damrakoc.com\/blog\/#website\"},\"datePublished\":\"2017-04-27T09:17:55+00:00\",\"dateModified\":\"2020-01-17T15:50:37+00:00\",\"author\":{\"@id\":\"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/c0aef33e15396f85a26d08495c742b8b\"},\"breadcrumb\":{\"@id\":\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\/\/damrakoc.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z?\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/damrakoc.com\/blog\/#website\",\"url\":\"http:\/\/damrakoc.com\/blog\/\",\"name\":\"Damra KO\u00c7\",\"description\":\"Software Developer\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/damrakoc.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/c0aef33e15396f85a26d08495c742b8b\",\"name\":\"damrakoc\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1a5d82872160ecc5a366412de9d017ead27f16fcfce7c8e46532199f18145f06?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1a5d82872160ecc5a366412de9d017ead27f16fcfce7c8e46532199f18145f06?s=96&d=mm&r=g\",\"caption\":\"damrakoc\"},\"url\":\"http:\/\/damrakoc.com\/blog\/author\/damrakoc\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection '\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7","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":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/","og_locale":"en_US","og_type":"article","og_title":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection '\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7","og_description":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? Benim bunu a\u00e7\u0131klamam biraz zor olurdu. Ama stackoverflow\u2019da\u00a0verilen cevap ger\u00e7ekten m\u00fckemmel. 5 ya\u015f\u0131nda bir \u00e7ocuk bir\u015feyler almak i\u00e7in buzdolab\u0131na gider ise baz\u0131 problemlere neden olabilir. Buzdolab\u0131n\u0131n kapa\u011f\u0131 a\u00e7\u0131k kalabilir veya ebeveynlerinin istemedi\u011fi \u015feyleri alabilir. Hatta buzdolab\u0131n\u0131n d\u0131\u015f\u0131ndaki \u015feylere bakabilir veya buzdolab\u0131ndan tarihi ge\u00e7mi\u015f bir\u015feyi [&hellip;]","og_url":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/","og_site_name":"Damra KO\u00c7","article_published_time":"2017-04-27T09:17:55+00:00","article_modified_time":"2020-01-17T15:50:37+00:00","author":"damrakoc","twitter_card":"summary_large_image","twitter_creator":"@damra_koc","twitter_site":"@damra_koc","twitter_misc":{"Written by":"damrakoc","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/","url":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/","name":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection '\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z? - Damra KO\u00c7","isPartOf":{"@id":"http:\/\/damrakoc.com\/blog\/#website"},"datePublished":"2017-04-27T09:17:55+00:00","dateModified":"2020-01-17T15:50:37+00:00","author":{"@id":"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/c0aef33e15396f85a26d08495c742b8b"},"breadcrumb":{"@id":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/damrakoc.com\/blog\/5-yasindaki-bir-cocuga-dependency-injectioni-anlatmaniz-istense-nasil-anlatirdiniz\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"http:\/\/damrakoc.com\/blog\/"},{"@type":"ListItem","position":2,"name":"5 ya\u015f\u0131ndaki bir \u00e7ocu\u011fa dependency injection &#8216;\u0131 anlatman\u0131z istense nas\u0131l anlat\u0131rd\u0131n\u0131z?"}]},{"@type":"WebSite","@id":"http:\/\/damrakoc.com\/blog\/#website","url":"http:\/\/damrakoc.com\/blog\/","name":"Damra KO\u00c7","description":"Software Developer","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/damrakoc.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/c0aef33e15396f85a26d08495c742b8b","name":"damrakoc","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/damrakoc.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1a5d82872160ecc5a366412de9d017ead27f16fcfce7c8e46532199f18145f06?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1a5d82872160ecc5a366412de9d017ead27f16fcfce7c8e46532199f18145f06?s=96&d=mm&r=g","caption":"damrakoc"},"url":"http:\/\/damrakoc.com\/blog\/author\/damrakoc\/"}]}},"_links":{"self":[{"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":3,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions"}],"predecessor-version":[{"id":171,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions\/171"}],"wp:attachment":[{"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/media?parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/categories?post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/damrakoc.com\/blog\/wp-json\/wp\/v2\/tags?post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}