﻿
{"id":6557,"date":"2017-06-20T03:10:07","date_gmt":"2017-06-20T03:10:07","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=6557"},"modified":"2017-06-20T03:53:57","modified_gmt":"2017-06-20T03:53:57","slug":"c-abstract-factory-design-patternabstract-factory-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-abstract-factory-design-patternabstract-factory-tasarim-deseni\/","title":{"rendered":"C# Abstract Factory Design Pattern(Abstract Factory Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu yaz\u0131m\u0131zda Creational Patterns(Olu\u015fturucu Kal\u0131plar) kategorisine giren Abstract Factory Design Pattern \u00fczerine konu\u015faca\u011f\u0131z. Asl\u0131nda biz \u00f6nceden bu desene benzer olan <a href=\"http:\/\/www.gencayyildiz.com\/blog\/c-factory-method-design-patternfactory-method-tasarim-deseni\/\" target=\"_blank\" rel=\"noopener noreferrer\">Factory Method Design Pattern<\/a> \u00fczerine bir makale ele alm\u0131\u015ft\u0131k. Yani mant\u0131ksal olarak ihtiya\u00e7 durumuna \u00e7okta yabanc\u0131 oldu\u011fumuz bir desen de\u011fildir Abstract Factory Design Pattern. O halde hemen ilk akla gelen &#8220;<em>Factory Method D.P. ile Abstract Factory D.P. aras\u0131ndaki fark nedir?<\/em>&#8221; sorusuna cevap vermeyle konumuza ba\u015flayal\u0131m.<\/p>\n<p>Factory Method D.P.; ili\u015fkisel olan birden fazla nesnenin \u00fcretimini ortak bir aray\u00fcz arac\u0131l\u0131\u011f\u0131yla tek bir s\u0131n\u0131f \u00fczerinden yap\u0131lacak bir talep ile ger\u00e7ekle\u015ftirmek ve nesne \u00fcretim an\u0131nda istemcinin \u00fcretilen nesneye olan ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 s\u0131f\u0131ra indirmeyi hedeflemektedir.<\/p>\n<p>Abstract Factory D.P. ise ili\u015fkisel olan birden fazla nesnenin \u00fcretimini tek bir aray\u00fcz taraf\u0131ndan de\u011fil her \u00fcr\u00fcn ailesi i\u00e7in farkl\u0131 bir aray\u00fcz tan\u0131mlayarak sa\u011flamaktad\u0131r.<\/p>\n<p>Yani anlayaca\u011f\u0131n\u0131z birden fazla \u00fcr\u00fcn ailesi ile \u00e7al\u0131\u015fmak zorunda kald\u0131\u011f\u0131m\u0131z durumlarda, istemciyi bu yap\u0131lardan soyutlamak i\u00e7in Abstract Factory D.P. do\u011fru bir yakla\u015f\u0131m olacakt\u0131r.<\/p>\n<p>Yap\u0131sal olarak Abstract Factory desenini detayland\u0131rmak i\u00e7in siz a\u015fa\u011f\u0131daki \u015femay\u0131 incelerken bende mant\u0131\u011f\u0131n\u0131 g\u00f6rselin alt\u0131nda kaleme almaya \u00e7al\u0131\u015fay\u0131m.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6562\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.jpg\" alt=\"C# Abstract Factory Design Pattern(Abstract Factory Tasar\u0131m Deseni)\" width=\"1106\" height=\"604\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.jpg 1106w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-300x164.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-768x419.jpg 768w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-1024x559.jpg 1024w\" sizes=\"auto, (max-width: 1106px) 100vw, 1106px\" \/><\/a><br \/>\n\u015eemaya dikkat ederseniz kurguda birazdan detayl\u0131ca ele alaca\u011f\u0131m\u0131z &#8220;Abstract Factory&#8221;, &#8220;Abstract Product&#8221;, &#8220;Concrete Factory&#8221; ve &#8220;Concrete Product&#8221; akt\u00f6rleri mevcuttur. Ama \u015f\u00f6yle bir i\u015flevselli\u011fi \u00f6zetlememiz gerekirse e\u011fer &#8220;Concrete Product&#8221; yap\u0131lar\u0131 interface yahut abstract class olarak tan\u0131mlanm\u0131\u015f &#8220;Abstract Product&#8221;lar taraf\u0131ndan implemente edilmektedirler. Bunlar\u0131n d\u0131\u015f\u0131nda fabrika s\u0131n\u0131flar\u0131m\u0131z\u0131n implementasyonuyla ilgilenen ve yine interface yahut abstract class olarak tan\u0131mlanabilen &#8220;Abstract Factory&#8221; imzas\u0131yla as\u0131l fabrikalar\u0131m\u0131z olan &#8220;Concrete Factory&#8221; s\u0131n\u0131flar\u0131m\u0131z t\u00fcretilmektedir. Somut fabrikalar\u0131m\u0131z i\u00e7erisinde implementasyondan gelen metotlar arac\u0131l\u0131\u011f\u0131yla \u00fcr\u00fcnleri olu\u015fturacak metotlar bar\u0131nd\u0131r\u0131lmakta ve bu fabrikalar ili\u015fkisel oldu\u011fu \u00fcr\u00fcnleri kendi b\u00fcnyelerinde \u00fcretip geriye &#8220;Abstract Product&#8221; referans\u0131nda return etmektedirler. En nihayetinde \u00fcretilen bu ili\u015fkisel \u00fcr\u00fcn ailesi Client taraf\u0131nada farkl\u0131 bir s\u0131n\u0131f arac\u0131l\u0131\u011f\u0131yla(<em>Creater.cs ya da ApplicationClass.cs vs.<\/em>) sunulmaktad\u0131r.<\/p>\n<p>Bu izahatten sonra ba\u015f akt\u00f6rlerimizi tek tek ele alal\u0131m;<\/p>\n<ul>\n<li><em><strong>Abstract Product<\/strong><\/em><br \/>\n\u00dcretilecek \u00fcr\u00fcnlerin soyut s\u0131n\u0131f\u0131d\u0131r. Belirli \u00fcr\u00fcnlerin i\u00e7erisindeki t\u00fcm member yap\u0131lanmas\u0131n\u0131 imza olarak ta\u015f\u0131makta ve Concrete Product yap\u0131lar\u0131na implemente etmektedir.<\/li>\n<li><em><strong>Concrete Product<\/strong><\/em><br \/>\n\u0130stemcinin \u00fcretmek istedi\u011fi \u00fcr\u00fcn ailesinin ger\u00e7ek somut s\u0131n\u0131flar\u0131d\u0131r.<\/li>\n<li><em><strong>Abstract Factory<\/strong><\/em><br \/>\n\u00dcr\u00fcn ailesini olu\u015fturacak olan fabrika s\u0131n\u0131flar\u0131na aray\u00fcz sa\u011flayan yap\u0131d\u0131r.<\/li>\n<li><em><strong>Concrete Factory<\/strong><\/em><br \/>\nAs\u0131l \u00fcr\u00fcn ailesini olu\u015fturan fabrikalard\u0131r.<\/li>\n<\/ul>\n<p>Burada dikkatinizi \u00e7ekmek istedi\u011fim bir husus vard\u0131r ki o da Abstract Factory desenini uygularken size kolayl\u0131k sa\u011flayacak bir mant\u0131ktan ibarettir. O mant\u0131k yukar\u0131daki akt\u00f6rlerin s\u0131ralamas\u0131nda gizlidir. Anlatmak istedi\u011fim Abstract Factory desenini uygularken in\u015fa s\u00fcrecinde olu\u015fturma \u00f6nceli\u011fi yukar\u0131da oldu\u011fu gibi &#8220;Abstract Product&#8221; ile ba\u015flayarak s\u0131ras\u0131yla &#8220;Concrete Product&#8221;, &#8220;Abstract Factory&#8221; ve son olarakta &#8220;Concrete Factory&#8221; \u015feklinde seyrederseniz deseni ba\u015far\u0131yla uygulam\u0131\u015f ve kurmu\u015f olacaks\u0131n\u0131z.<\/p>\n<p>\u015eimdi bir \u00f6rnek senaryo \u00fczerinden projemizi canland\u0131ral\u0131m. Senaryomuzda; &#8220;Sql&#8221; ve &#8220;MySql&#8221; olmak \u00fczere iki adet veritaban\u0131 s\u00f6z konusudur. Bu veritabanlar\u0131 client taraf\u0131ndan talep edilirken; ili\u015fkisel &#8220;Connection&#8221; ve &#8220;Command&#8221; nesneleri yani \u00fcr\u00fcn aileleri olu\u015fturulacakt\u0131r. Tabi bu i\u015flemler yap\u0131l\u0131rken istemci sadece istedi\u011fi veritaban\u0131yla ilgilenecek, \u00fcr\u00fcn ailesiyle olan t\u00fcm ba\u011flar Abstract Factory ile soyutlanm\u0131\u015f olacak ve \u00fcretimlerinden sorumlu olmayacakt\u0131r.<\/p>\n<p><a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-6571\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.png\" alt=\"C# Abstract Factory Design Pattern(Abstract Factory Tasar\u0131m Deseni)\" width=\"596\" height=\"418\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni.png 596w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-300x210.png 300w\" sizes=\"auto, (max-width: 596px) 100vw, 596px\" \/><\/a><br \/>\nYukar\u0131daki Class Diyagram\u0131ndan da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz \u00fczere senaryodaki &#8220;Connection ve &#8220;Command&#8221; nesneleri &#8220;Abstract Product&#8221;lar\u0131m\u0131zken bunlar\u0131 implement eden &#8220;SqlConnection&#8221;, &#8220;MySqlConection&#8221;, &#8220;SqlCommand&#8221; ve &#8220;MySqlCommand&#8221; s\u0131n\u0131flar\u0131 ise &#8220;Concrete Product&#8221;lard\u0131r. Benzer \u015fekilde fabrika s\u0131n\u0131flar\u0131m\u0131z olan &#8220;Concrete Factory&#8221; nesnelerimiz ise &#8220;SqlDatabase&#8221; ve &#8220;MySqlDatabase&#8221; s\u0131n\u0131flar\u0131d\u0131r ve bunlar\u0131n kal\u0131t\u0131m alaca\u011f\u0131 &#8220;Abstract Factory&#8221; s\u0131n\u0131f\u0131 ise &#8220;DatabaseFactory&#8221; soyut s\u0131n\u0131f\u0131d\u0131r.<\/p>\n<p>\u015eimdi desenimizi uygulamaya ba\u015flayal\u0131m. Tabi yukar\u0131larda sizlere verdi\u011fim s\u0131ralamay\u0131 g\u00f6z \u00f6n\u00fcne alarak bu i\u015flemi ger\u00e7ekle\u015ftirece\u011fiz.<\/p>\n<p><em><strong>Ad\u0131m 1<\/strong><\/em><br \/>\n\u00d6ncelikle &#8220;Abstract Product&#8221;lar\u0131m\u0131z olan &#8220;Connection&#8221; ve &#8220;Command&#8221; nesnelerini olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Abstract Product\r\n    abstract class Connection\r\n    {\r\n        public abstract bool Connect();\r\n        public abstract bool DisConnect();\r\n        public abstract string State { get; }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Abstract Product\r\n    abstract class Command\r\n    {\r\n        public abstract void Execute(string query);\r\n    }\r\n<\/pre>\n<p><em><strong>Ad\u0131m 2<\/strong><\/em><br \/>\nArd\u0131ndan &#8220;Concrete Product&#8221;lar\u0131m\u0131z olan &#8220;SqlConnection&#8221;, &#8220;SqlCommand&#8221;, &#8220;MySqlConnection&#8221; ve &#8220;MySqlCommand&#8221; nesnelerini olu\u015ftural\u0131m ve ilgili &#8220;Abstract Product&#8221;lar\u0131 implement edelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concrete Product\r\n    class SqlConnection : Connection\r\n    {\r\n        public override string State =&gt; &quot;Open&quot;;\r\n        public override bool Connect()\r\n        {\r\n            Console.WriteLine(&quot;SqlConnection ba\u011flant\u0131s\u0131 kuruluyor.&quot;);\r\n            return true;\r\n        }\r\n        public override bool DisConnect()\r\n        {\r\n            Console.WriteLine(&quot;SqlConnection ba\u011flant\u0131s\u0131 kesiliyor.&quot;);\r\n            return false;\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concrete Product\r\n    class SqlCommand : Command\r\n    {\r\n        public override void Execute(string query) =&gt; Console.WriteLine(&quot;SqlCommand sorgusu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.&quot;);\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concrete Product\r\n    class MySqlConnection : Connection\r\n    {\r\n        public override string State =&gt; &quot;Open&quot;;\r\n        public override bool Connect()\r\n        {\r\n            Console.WriteLine(&quot;MySqlConnection ba\u011flant\u0131s\u0131 kuruluyor.&quot;);\r\n            return true;\r\n        }\r\n        public override bool DisConnect()\r\n        {\r\n            Console.WriteLine(&quot;MySqlConnection ba\u011flant\u0131s\u0131 kesiliyor.&quot;);\r\n            return false;\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concrete Product\r\n    class MySqlCommand : Command\r\n    {\r\n        public override void Execute(string query) =&gt; Console.WriteLine(&quot;MySqlCommand sorgusu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131.&quot;);\r\n    }\r\n<\/pre>\n<p><em><strong>Ad\u0131m 3<\/strong><\/em><br \/>\n\u015eimdi s\u0131ra &#8220;Abstract Factory&#8221; yap\u0131m\u0131z\u0131 olu\u015fturmaya geldi.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Abstract Factory\r\n    abstract class DatabaseFactory\r\n    {\r\n        public abstract Connection CreateConnection();\r\n        public abstract Command CreateCommand();\r\n    }\r\n<\/pre>\n<p><em><strong>Ad\u0131m 4<\/strong><\/em><br \/>\nArt\u0131k &#8220;Concrete Factory&#8221; s\u0131n\u0131flar\u0131m\u0131z\u0131 olu\u015fturabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concreate Factory\r\n    class SqlDatabase : DatabaseFactory\r\n    {\r\n        public override Command CreateCommand() =&gt; new SqlCommand();\r\n        public override Connection CreateConnection() =&gt; new SqlConnection();\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Concreate Factory\r\n    class MySqlDatabase : DatabaseFactory\r\n    {\r\n        public override Command CreateCommand() =&gt; new MySqlCommand();\r\n        public override Connection CreateConnection() =&gt; new MySqlConnection();\r\n    }\r\n<\/pre>\n<p><em><strong>Ad\u0131m 5<\/strong><\/em><br \/>\nYap\u0131lan bu in\u015fay\u0131 clienta sunacak Creater katman\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/Creater\r\n    class Creater\r\n    {\r\n        DatabaseFactory _databaseFactory;\r\n        Connection _connection;\r\n        Command _command;\r\n        public Creater(DatabaseFactory databaseFactory)\r\n        {\r\n            _databaseFactory = databaseFactory;\r\n            _connection = _databaseFactory.CreateConnection();\r\n            _command = _databaseFactory.CreateCommand();\r\n\r\n            Start();\r\n        }\r\n\r\n        void Start()\r\n        {\r\n            if (_connection.State == &quot;Open&quot;)\r\n            {\r\n                _connection.Connect();\r\n                _command.Execute(&quot;Select * from...&quot;);\r\n                _connection.DisConnect();\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p><em><strong>Ad\u0131m 6<\/strong><\/em><br \/>\nClient taraf\u0131ndan yapt\u0131\u011f\u0131m\u0131z bu tasar\u0131y\u0131 kullanarak \u00fcr\u00fcn ailelerimizi olu\u015ftural\u0131m.<\/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            Creater create = new Creater(new SqlDatabase());\r\n            Console.WriteLine(&quot;**********&quot;);\r\n            create = new Creater(new MySqlDatabase());\r\n            Console.Read();\r\n        }\r\n    }\r\n<\/pre>\n<p>Ve projemizi derleyip \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131m\u0131zda a\u015fa\u011f\u0131daki ekran g\u00f6r\u00fcnt\u00fcs\u00fcyle kar\u015f\u0131la\u015fmaktay\u0131z.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-1.png\" alt=\"C# Abstract Factory Design Pattern(Abstract Factory Tasar\u0131m Deseni).PNG\" width=\"315\" height=\"154\" class=\"aligncenter size-full wp-image-6577\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-1.png 315w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2017\/06\/C-Abstract-Factory-Design-PatternAbstract-Factory-Tasar\u0131m-Deseni-1-300x147.png 300w\" sizes=\"auto, (max-width: 315px) 100vw, 315px\" \/><\/a><\/p>\n<p>Anlayaca\u011f\u0131n\u0131z \u00fczere birbiriyle ili\u015fkili \u00fcr\u00fcn ailesini olu\u015ftururken her bir product i\u00e7in \u00f6zel bir aray\u00fcz tasarlanmakta ve bu aray\u00fczler sayesinde ilgili \u00fcr\u00fcn ilgili fabrikada olu\u015fturulmaktad\u0131r. Fabrikalar\u0131n ise ortak bir aray\u00fczden t\u00fcretilmesinin sebebi ise clienttan yap\u0131lacak talepte ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 ortadan kald\u0131rmak i\u00e7indir.<\/p>\n<p>Sonraki yaz\u0131lar\u0131m g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\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 yaz\u0131m\u0131zda Creational Patterns(Olu\u015fturucu Kal\u0131plar) kategorisine giren Abstract Factory Design Pattern \u00fczerine konu\u015faca\u011f\u0131z. Asl\u0131nda biz \u00f6nceden bu desene benzer olan Factory Method Design Pattern \u00fczerine bir makale ele alm\u0131\u015ft\u0131k. Yani mant\u0131ksal olarak ihtiya\u00e7&#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":6562,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[1850,1854,1855,1851,1852,1853,925,926],"class_list":["post-6557","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-abstract-factory","tag-abstract-factory-design-pattern","tag-abstract-factory-tasarim-deseni","tag-abstract-product","tag-concrete-factory","tag-concrete-product","tag-creational-patterns","tag-olusturucu-kaliplar"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6557","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=6557"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/6557\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/6562"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=6557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=6557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=6557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}