﻿
{"id":4091,"date":"2016-04-22T01:19:28","date_gmt":"2016-04-22T01:19:28","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=4091"},"modified":"2016-04-22T01:19:29","modified_gmt":"2016-04-22T01:19:29","slug":"c-facade-design-patternfacade-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-facade-design-patternfacade-tasarim-deseni\/","title":{"rendered":"C# Facade Design Pattern(Facade Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu makalemizde Structural Patterns(Yap\u0131sal Desenler) kategorisine giren Facade Design Pattern hakk\u0131nda teferruatl\u0131 bir i\u00e7erik olu\u015fturaca\u011f\u0131z.<\/p>\n<p>&#8216;Facade&#8217;, kelime anlam\u0131 olarak &#8216;cephe&#8217; diye nitelendirebilece\u011fimiz aslen Frans\u0131zca k\u00f6kenli bir kelimedir. Tasar\u0131m a\u00e7\u0131s\u0131ndan, \u00f6nemli olan cepheyi i\u015faret eden bu \u015fablon terimi bir binan\u0131n d\u0131\u015f cephesi olarakta anlamland\u0131r\u0131labilir.<\/p>\n<p>Mimarisel a\u00e7\u0131dan ise, karma\u015f\u0131k ve detayl\u0131 bir sistemi organize eden ve bir b\u00fct\u00fcn olarak clientlara(istemcilere) sunan yap\u0131d\u0131r. Anlayaca\u011f\u0131n\u0131z, karma\u015f\u0131k ve detayl\u0131 olarak nitelendirdi\u011fimiz bu sistemi bir alt sistem olarak varsayarsak e\u011fer bu sistemi kullanacak clientlara daha basit bir aray\u00fcz sa\u011flamak ve alt sistemleri bu aray\u00fcze organize bir \u015fekilde dahil etmek ve bu alt sistemlerin sa\u011fl\u0131kl\u0131 \u00e7al\u0131\u015fabilmesi i\u00e7in bu aray\u00fcz \u00e7at\u0131s\u0131 alt\u0131nda i\u015fin algoritmas\u0131na uygun i\u015flev sergilemek istersek Facade Design Pattern&#8217;i kullanmaktay\u0131z.<\/p>\n<blockquote><p>Facade Design Pattern&#8217;i k\u0131saca, \u00e7oklu k\u00fct\u00fcphane kodlar\u0131na(alt sistemlere) ula\u015f\u0131m i\u00e7in tasarlad\u0131\u011f\u0131m\u0131z aray\u00fcz olarak nitelendirebiliriz.<\/p><\/blockquote>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-facade-design-patternfacade-tasarim-deseni\/c-facade-design-patternfacade-tasarim-deseni\/\" rel=\"attachment wp-att-4098\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-4098\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Facade-Design-PatternFacade-Tasar\u0131m-Deseni.png\" alt=\"C# Facade Design Pattern(Facade Tasar\u0131m Deseni)\" width=\"486\" height=\"358\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Facade-Design-PatternFacade-Tasar\u0131m-Deseni.png 486w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Facade-Design-PatternFacade-Tasar\u0131m-Deseni-300x221.png 300w\" sizes=\"auto, (max-width: 486px) 100vw, 486px\" \/><\/a><br \/>\nYukar\u0131daki UML Diyagram\u0131 Facade Design Pattern&#8217;i net bir \u015fekilde a\u00e7\u0131klamaktad\u0131r. Dikkat ederseniz e\u011fer birden fazla Client Facade aray\u00fcz\u00fcm\u00fcz\u00fc kullanarak alt sistem olarak nitelendirilen s\u0131n\u0131flara eri\u015fmekte ve organize bir \u015fekilde kullanabilmektedir.<\/p>\n<p>Burada bilmeniz gereken durum, alt sistem i\u00e7erisinde bulunan s\u0131n\u0131flar\u0131n birbirlerinden ba\u011f\u0131ms\u0131z olmas\u0131d\u0131r. Ayriyetten Facade s\u0131n\u0131f\u0131ndan da ba\u011f\u0131ms\u0131z bir \u015fekilde \u00e7al\u0131\u015fabilmektedirler. Clientlar isterse alt sistem s\u0131n\u0131flar\u0131na direkt eri\u015fim sa\u011flayarak \u00e7al\u0131\u015fmalar\u0131n\u0131 ger\u00e7ekle\u015ftirebilirler. Tabi e\u011fer ki\u00a0Facade Design Pattern uyguluyorsan\u0131z alt sistemdeki memberlar\u0131n eri\u015fimlerini private olarak tan\u0131mlay\u0131p, Facade s\u0131n\u0131f\u0131 \u00fczerinden eri\u015fimlerini sa\u011flayabilirsiniz. Bu sizin tercihinize kalm\u0131\u015ft\u0131r.<\/p>\n<p>\u015eimdi gelin bir araba fabrikas\u0131n\u0131 senaryola\u015ft\u0131r\u0131p, Facade tasar\u0131m desenini \u00f6rneklendirelim.<br \/>\n\u0130lk yapaca\u011f\u0131m\u0131z i\u015f alt sistemlerimizi olu\u015fturmakt\u0131r.<\/p>\n<p>Alt sistem 1.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class IskeletOlusturu\r\n    {\r\n        public int x { get; set; }\r\n        public int y { get; set; }\r\n        public bool z { get; set; }\r\n    }\r\n<\/pre>\n<p>Alt sistem 2.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class MotorOlusturucu\r\n    {\r\n        public int x { get; set; }\r\n        public int y { get; set; }\r\n        public bool z { get; set; }\r\n    }\r\n<\/pre>\n<p>Alt sistem 3.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class ArabaOlusturucu\r\n    {\r\n        public IskeletOlusturu Iskelet { get; set; }\r\n        public MotorOlusturucu Motor { get; set; }\r\n        public ArabaOlusturucu(IskeletOlusturu Iskelet, MotorOlusturucu Motor)\r\n        {\r\n            this.Iskelet = Iskelet;\r\n            this.Motor = Motor;\r\n        }\r\n\r\n        public Araba Olustur(Renkler renk)\r\n        {\r\n            return new Araba(Iskelet, Motor, renk);\r\n        }\r\n    }\r\n<\/pre>\n<p>Alt sistem 4.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    enum Renkler\r\n    {\r\n        K\u0131rm\u0131z\u0131,\r\n        Mavi,\r\n        Mor,\r\n        Ye\u015fil,\r\n        Sar\u0131\r\n    }\r\n<\/pre>\n<p>Alt sistem 5.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Araba\r\n    {\r\n        public Araba(IskeletOlusturu Iskelet, MotorOlusturucu Motor, Renkler Renk)\r\n        {\r\n            Console.WriteLine($&quot;Iskelet x = {Iskelet.x}&quot;);\r\n            Console.WriteLine($&quot;Iskelet y = {Iskelet.y}&quot;);\r\n            Console.WriteLine($&quot;Iskelet z = {Iskelet.z}&quot;);\r\n            Console.WriteLine($&quot;Motor x = {Motor.x}&quot;);\r\n            Console.WriteLine($&quot;Motor y = {Motor.y}&quot;);\r\n            Console.WriteLine($&quot;Motor z = {Motor.z}&quot;);\r\n            Console.WriteLine($&quot;Renk = {Renk}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>\u015euana kadar g\u00f6rd\u00fc\u011f\u00fcn\u00fcz t\u00fcm yap\u0131lar alt sistemin bir par\u00e7as\u0131n\u0131 te\u015fkil etmektedirler. E\u011fer Facade D. P.&#8217;ni kullanmazsak bu sistemlerin i\u015flevi her laz\u0131m oldu\u011funda uzun uzun kodlamak durumunda kalaca\u011f\u0131z. O y\u00fczden client ile alt sistem aras\u0131na sokaca\u011f\u0131m\u0131z Facade s\u0131n\u0131f\u0131m\u0131z\u0131 in\u015fa etmek daha makul ve sade bir i\u015f olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class FacadeUretici\r\n    {\r\n        IskeletOlusturu iskelet;\r\n        MotorOlusturucu motor;\r\n        ArabaOlusturucu olustur;\r\n\r\n        public FacadeUretici()\r\n        {\r\n            iskelet = new IskeletOlusturu() { x = 3, y = 5, z = true };\r\n            motor = new MotorOlusturucu() { x = 2, y = 4, z = false };\r\n            olustur = new ArabaOlusturucu(iskelet, motor);\r\n        }\r\n\r\n        public void ArabaUret()\r\n        {\r\n            Araba uretilenAraba = olustur.Olustur(Renkler.K\u0131rm\u0131z\u0131);\r\n        }\r\n    }\r\n<\/pre>\n<p>Evet, yukar\u0131daki kod blo\u011funda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi alt sistemde bulunan s\u0131n\u0131flar\u0131 organize bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmakta ve ArabaUret s\u0131n\u0131f\u0131 arac\u0131l\u0131\u011f\u0131yla istedi\u011fimiz neticeyi elde ettirmektedir. Dikkat ederseniz Facade s\u0131n\u0131f\u0131m\u0131z alt sistemdeki t\u00fcm s\u0131n\u0131flar\u0131 temsil etmektedir.<\/p>\n<p>Bunlar\u0131n yan\u0131nda ayriyetten Facade s\u0131n\u0131f\u0131n\u0131 <a href=\"http:\/\/www.gencayyildiz.com\/blog\/cta-singleton-design-patternsingleton-tasarim-deseni\/\" target=\"_blank\">Singleton Design Pattern<\/a> olarak tasarlaman\u0131z\u0131 \u00f6neririm.<\/p>\n<p>\u015eimdi Facade D. P.&#8217;nin son ad\u0131m\u0131 olarak clientlar\u0131m\u0131zda ilgili Facade s\u0131n\u0131f\u0131m\u0131z\u0131 kullanal\u0131m. Tabi burada Client olarak nitelendirdi\u011fimiz yer Program.cs s\u0131n\u0131f\u0131m\u0131z olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    class Program\r\n    {\r\n        static void Main(string&#x5B;] args)\r\n        {\r\n            FacadeUretici uretici = new FacadeUretici();\r\n            uretici.ArabaUret();\r\n\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi alt sistemlerde karma\u015f\u0131k ve detayl\u0131 olarak nitelendirebilece\u011fimiz i\u015flemleri organize \u015fekilde Facade s\u0131n\u0131f\u0131nda i\u015fleyerek, clientta bu basitle\u015ftirilmi\u015f aray\u00fcz\u00fc kullanarak i\u015flemlerimizi sa\u011fde bir \u015fekilde ger\u00e7ekle\u015ftirmi\u015f olduk.<\/p>\n<p>\u0130lgili tasar\u0131m deseniyle in\u015fa edilen projemizin \u00e7\u0131kt\u0131s\u0131da a\u015fa\u011f\u0131daki gibi olacakt\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-facade-design-patternfacade-tasarim-deseni\/c-facade-design-patternfacade-tasarim-deseni-2\/\" rel=\"attachment wp-att-4102\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2016\/04\/C-Facade-Design-PatternFacade-Tasar\u0131m-Deseni-1.png\" alt=\"C# Facade Design Pattern(Facade Tasar\u0131m Deseni)\" width=\"173\" height=\"170\" class=\"aligncenter size-full wp-image-4102\" \/><\/a><\/p>\n<p>Evet, bir Design Pattern makalemizinde sonuna gelmi\u015f bulunmaktay\u0131z.<\/p>\n<p>Okudu\u011funuz i\u00e7in te\u015fekk\u00fcr ederim&#8230;<\/p>\n<p>Sonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#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, Bu makalemizde Structural Patterns(Yap\u0131sal Desenler) kategorisine giren Facade Design Pattern hakk\u0131nda teferruatl\u0131 bir i\u00e7erik olu\u015fturaca\u011f\u0131z. &#8216;Facade&#8217;, kelime anlam\u0131 olarak &#8216;cephe&#8217; diye nitelendirebilece\u011fimiz aslen Frans\u0131zca k\u00f6kenli bir kelimedir. Tasar\u0131m a\u00e7\u0131s\u0131ndan, \u00f6nemli olan cepheyi i\u015faret&#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":4098,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[750,1114,1112,1113,1110,1115,1111],"class_list":["post-4091","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-design-pattern","tag-design-patterns","tag-facade-design-pattern","tag-facade-tasarim-deseni","tag-structural-patterns","tag-tasarim-desenleri","tag-yapisal-desenler"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4091","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=4091"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/4091\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/4098"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=4091"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=4091"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=4091"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}