﻿
{"id":3968,"date":"2016-04-10T00:08:49","date_gmt":"2016-04-10T00:08:49","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=3968"},"modified":"2016-04-10T00:08:49","modified_gmt":"2016-04-10T00:08:49","slug":"dependency-injection-ile-factory-method-design-pattern-sentezi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/dependency-injection-ile-factory-method-design-pattern-sentezi\/","title":{"rendered":"Dependency Injection \u0130le Factory Method Design Pattern Sentezi"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/dependency-injection-nedir-nasil-uygulanir\/\" target=\"_blank\">Dependency Injection<\/a> yakla\u015f\u0131m\u0131 ile <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-factory-method-design-patternfactory-method-tasarim-deseni\/\" target=\"_blank\">Factory Method Design Pattern<\/a> aras\u0131nda bir b\u00fct\u00fcnl\u00fck sa\u011flayarak bir proje \u00fczerinde beraber nas\u0131l bir tasar\u0131m ger\u00e7ekle\u015ftirebiliriz? sorusuna cevap vermeye \u00e7al\u0131\u015faca\u011f\u0131z.<\/p>\n<p>Bu iki konu \u00fczerinde detayl\u0131 durmayaca\u011f\u0131m. Lakin k\u0131saca \u00f6zetleyecek olursak e\u011fer Dependency Injection, projedeki ba\u011f\u0131ml\u0131l\u0131k entegrasyonlar\u0131n\u0131 soyutlamak \u00fczerine profesyonel maksatl\u0131 bir yakla\u015f\u0131m sergilememizi sa\u011flarken, Factory Method Design Pattern ise birbirleriyle ili\u015fkisel nesneleri \u00fcretirken alternatif bir yol sunmaktayd\u0131.<\/p>\n<p>\u015euanda bu i\u00e7erikte yapmak istedi\u011fimiz olay ise bu iki yakla\u015f\u0131m\u0131 uygulayabilece\u011fimiz \u00f6rnek bir proje ger\u00e7ekle\u015ftirmektir.<\/p>\n<p>\u00d6rnek projeyi makalenin sonunda indirebilirsiniz. Senaryo \u00e7ok basit oldu\u011fu i\u00e7in bir film projesinde \u00f6rneklendirme ama\u00e7l\u0131 \u00e7al\u0131\u015faca\u011f\u0131m\u0131z\u0131 s\u00f6ylemenin yeterli oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorum&#8230;<\/p>\n<p>Hadi ba\u015flayal\u0131m&#8230;<br \/>\n\u00d6ncelikle Factory Method Design Pattern&#8217;i uygulayabilmek i\u00e7in ilgili soyut s\u0131n\u0131f\u0131 olu\u015fturuyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    abstract class FilmAbs\r\n    {\r\n        public abstract string FilmAdi();\r\n        public abstract bool Oynat();\r\n        public abstract bool Sat();\r\n        public abstract bool VarMi();\r\n        public abstract int Stok { get; }\r\n    }\r\n<\/pre>\n<p>\u00dcr\u00fcnleri(filmleri) olu\u015fturuyorum ve FilmAbs isimli soyut s\u0131n\u0131f\u0131m\u0131zdan miras al\u0131yorum. Do\u011fal olarak ilgili abstract s\u0131n\u0131f i\u00e7erisindeki abstract elemanlar\u0131 \u00fcr\u00fcnlerime uyguluyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class AFilm : FilmAbs\r\n    {\r\n        public override int Stok\r\n        {\r\n            get\r\n            {\r\n                return 23;\r\n            }\r\n        }\r\n\r\n        public override string FilmAdi()\r\n        {\r\n            Console.WriteLine(&quot;A Film&quot;);\r\n            return &quot;A Film&quot;;\r\n        }\r\n\r\n        public override bool Oynat()\r\n        {\r\n            Console.WriteLine(&quot;A Film Oynat\u0131l\u0131yor...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool Sat()\r\n        {\r\n            Console.WriteLine(&quot;A Film Sat\u0131lm\u0131\u015ft\u0131r...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool VarMi()\r\n        {\r\n            Console.WriteLine($&quot;A Film'den {Stok} kadar var...&quot;);\r\n            return true;\r\n        }\r\n    }\r\n\r\n    class BFilm : FilmAbs\r\n    {\r\n        public override int Stok\r\n        {\r\n            get\r\n            {\r\n                return 44;\r\n            }\r\n        }\r\n\r\n        public override string FilmAdi()\r\n        {\r\n            Console.WriteLine(&quot;B Film&quot;);\r\n            return &quot;B Film&quot;;\r\n        }\r\n\r\n        public override bool Oynat()\r\n        {\r\n            Console.WriteLine(&quot;B Film Oynat\u0131l\u0131yor...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool Sat()\r\n        {\r\n            Console.WriteLine(&quot;B Film Sat\u0131lm\u0131\u015ft\u0131r...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool VarMi()\r\n        {\r\n            Console.WriteLine($&quot;B Film'den {Stok} kadar var...&quot;);\r\n            return true;\r\n        }\r\n    }\r\n\r\n    class CFilm : FilmAbs\r\n    {\r\n        public override int Stok\r\n        {\r\n            get\r\n            {\r\n                return 414;\r\n            }\r\n        }\r\n\r\n        public override string FilmAdi()\r\n        {\r\n            Console.WriteLine(&quot;C Film&quot;);\r\n            return &quot;C Film&quot;;\r\n        }\r\n\r\n        public override bool Oynat()\r\n        {\r\n            Console.WriteLine(&quot;C Film Oynat\u0131l\u0131yor...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool Sat()\r\n        {\r\n            Console.WriteLine(&quot;C Film Sat\u0131lm\u0131\u015ft\u0131r...&quot;);\r\n            return true;\r\n        }\r\n\r\n        public override bool VarMi()\r\n        {\r\n            Console.WriteLine($&quot;C Film'den {Stok} kadar var...&quot;);\r\n            return true;\r\n        }\r\n    }\r\n<\/pre>\n<p>Ard\u0131ndan Creater s\u0131n\u0131f\u0131m\u0131 olu\u015fturarak Factory Design Pattern \u00e7al\u0131\u015fmam\u0131 tamamlam\u0131\u015f oluyorum.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    enum FilmTipleri\r\n    {\r\n        AFilm,\r\n        BFilm,\r\n        CFilm\r\n    }\r\n\r\n    class Creater\r\n    {\r\n        public FilmAbs FactoryMethod(FilmTipleri FilmTipi)\r\n        {\r\n            FilmAbs film = null;\r\n\r\n            switch (FilmTipi)\r\n            {\r\n                case FilmTipleri.AFilm:\r\n                    film = new AFilm();\r\n                    break;\r\n                case FilmTipleri.BFilm:\r\n                    film = new BFilm();\r\n                    break;\r\n                case FilmTipleri.CFilm:\r\n                    film = new CFilm();\r\n                    break;\r\n            }\r\n\r\n            return film;\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015eimdide film sat\u0131c\u0131 s\u0131n\u0131f\u0131m\u0131 Dependency Injection yakla\u015f\u0131m\u0131yla olu\u015fturuyorum. A\u015fa\u011f\u0131daki \u00e7al\u0131\u015fmada Constructor Injection(Constructor Based Dependecy Injection) kullan\u0131lm\u0131\u015ft\u0131r. Dikkat ederseniz e\u011fer Factory Method D. P. sonucu \u00fcretilecek olan &#8220;FilmAbs&#8221; nesnesini &#8220;FilmSatici&#8221; nesnesi i\u00e7erisinde Dependency Injection&#8217;\u0131 soyutlam\u0131\u015f bir bi\u00e7imde referans olarak almaktad\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class FilmSatici\r\n    {\r\n        FilmAbs film;\r\n        public FilmSatici(FilmAbs film)\r\n        {\r\n            this.film = film;\r\n        }\r\n\r\n        public void Sat()\r\n        {\r\n            if (film.VarMi())\r\n                film.Sat();\r\n        }\r\n    }\r\n<\/pre>\n<p>DI ile Factory D. P. yakla\u015f\u0131mlar\u0131n\u0131 beraber kulland\u0131\u011f\u0131m\u0131z tasar\u0131m\u0131m\u0131z bitmi\u015ftir. Tasar\u0131y\u0131 a\u015fa\u011f\u0131daki gibi kullanabilmekteyiz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            \/\/Factory Method Design Pattern\r\n            Creater Uretici = new Creater();\r\n            \/\/Dependency Injection\r\n            FilmSatici Satici = new FilmSatici(Uretici.FactoryMethod(FilmTipleri.CFilm));\r\n            Satici.Sat();\r\n\r\n            Console.Read();\r\n        }\r\n<\/pre>\n<p>Bu i\u00e7eri\u011fimizde sadece projeyi payla\u015fmay\u0131 d\u00fc\u015f\u00fcnmekteydim. Velhas\u0131l yukar\u0131da yap\u0131lan \u00e7al\u0131\u015fmay\u0131 \u00f6zetlemeye \u00e7al\u0131\u015ft\u0131m.<\/p>\n<p>Projeyi <a href=\"http:\/\/www.gencayyildiz.com\/blog\/dependency-injection-ile-factory-method-design-pattern-sentezi\/dependency-injection-ile-factory-method-design-pattern-sentezi\/\"rel=\"attachment wp-att-3976\">buradan<\/a> indirebilir, g\u00f6z atarak daha net bir \u015fekilde \u015femay\u0131 kafan\u0131zda oturtabilirsiniz&#8230;<\/p>\n<p>\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Dependency Injection yakla\u015f\u0131m\u0131 ile Factory Method Design Pattern aras\u0131nda bir b\u00fct\u00fcnl\u00fck sa\u011flayarak bir proje \u00fczerinde beraber nas\u0131l bir tasar\u0131m ger\u00e7ekle\u015ftirebiliriz? sorusuna cevap vermeye \u00e7al\u0131\u015faca\u011f\u0131z. Bu iki konu \u00fczerinde detayl\u0131 durmayaca\u011f\u0131m. Lakin k\u0131saca \u00f6zetleyecek&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":3223,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[948,947,946,1051],"class_list":["post-3968","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-constructor-based-dependecy-injection","tag-constructor-injection","tag-dependency-injection","tag-factory-method-design-pattern"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3968","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=3968"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/3968\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/3223"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=3968"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=3968"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=3968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}