﻿
{"id":20810,"date":"2021-02-25T00:47:45","date_gmt":"2021-02-25T00:47:45","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=20810"},"modified":"2021-02-25T00:47:45","modified_gmt":"2021-02-25T00:47:45","slug":"c-mediator-design-patternmediator-tasarim-deseni","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/c-mediator-design-patternmediator-tasarim-deseni\/","title":{"rendered":"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu makalemizde <em>Davran\u0131\u015fsal Tasar\u0131m Kal\u0131plar\u0131ndan(Behavioral Patterns)<\/em> olan <em>Mediator Tasar\u0131m Desenini(Mediator Design Pattern)<\/em> bol pratiksel senaryolar e\u015fli\u011finde inceliyor olaca\u011f\u0131z. \u0130\u00e7eri\u011fe ba\u015flamadan \u00f6nce \u015fahsi fikrimi beyan ederek bir girizg\u00e2h eylemek isterim ki; bana sorarsan\u0131z do\u011fas\u0131 itibariyle design pattern&#8217;lar aras\u0131nda kullan\u0131m sahas\u0131 a\u00e7\u0131s\u0131ndan olduk\u00e7a k\u0131s\u0131r olan lakin son y\u0131llarda MediatR gibi paketlerin pop\u00fclaritesinin artmas\u0131yla olduk\u00e7a yayg\u0131nla\u015fan bir tasar\u0131m desenini ele al\u0131yor olaca\u011f\u0131z. Dolay\u0131s\u0131yla bu desenin, salt haliyle anla\u015f\u0131labilmesi ve ger\u00e7ek senaryolara uyarlanabilmesi olduk\u00e7a zor ve zahmetli oldu\u011fu i\u00e7in ben deniz bir ka\u00e7 farkl\u0131 senaryoyla konuyu inceleyecek ve kavran\u0131labilirli\u011fi artt\u0131rmak i\u00e7in ince dokunu\u015flarla i\u00e7eri\u011fi destekleyece\u011fim&#8230; Tabi bu s\u00fcre\u00e7te okurken sizlerin ise \u00e7ay veya kahveyle e\u015flik etmeniz kafi olacakt\u0131r \ud83d\ude42<\/p>\n<p>Hadi ba\u015flayal\u0131m&#8230;<\/p>\n<h3 style=\"color:#e83e8c;\">Mediator Tasar\u0131m Kal\u0131b\u0131n\u0131n Amac\u0131 Nedir?<\/h3>\n<p>Nesneler aras\u0131ndaki kaotik ba\u011f\u0131ml\u0131l\u0131klar\u0131 azaltman\u0131za izin veren davran\u0131\u015fsal bir tasar\u0131m modelidir.<\/p>\n<p><strong><em>Hoca, nesneler aras\u0131ndaki kaotik ba\u011f\u0131ml\u0131l\u0131klardan kast\u0131n ne la Allahisen?<\/em><\/strong><br \/>\nTamam, bunu \u015f\u00f6yle \u00f6rneklendirelim. M\u00fc\u015fteri profilleri olu\u015fturmak ve d\u00fczenlemek i\u00e7in textboxlar, checkboxlar, buttonlar vs. gibi \u00e7e\u015fitli form yap\u0131lanmalar\u0131n\u0131n ve bunlar\u0131n kendi aralar\u0131nda hizal\u0131 ve i\u015flevsel bir diyalo\u011funun oldu\u011funu varsayal\u0131m.<br \/>\n<div id=\"attachment_20815\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20815\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"600\" height=\"270\" class=\"size-full wp-image-20815\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni.png 600w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-300x135.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-20815\" class=\"wp-caption-text\">Uygulama geli\u015ftik\u00e7e kontroller aras\u0131ndaki ili\u015fkiler daha da kaotik hale gelmektedir.<\/p><\/div>\u0130\u015fte bu i\u015fleminizi yukar\u0131daki gibi her bir kontrol\u00fcn birbiriyle temas\u0131n\u0131 sa\u011flayacak \u015fekilde d\u00fczenlerseniz kastedilen <u>kaotik ba\u011f\u0131ml\u0131l\u0131klar<\/u> s\u00f6z konusudur diyebiliriz.<\/p>\n<blockquote><p><em style=\"color:green;\">Bir s\u0131n\u0131f\u0131n sahip oldu\u011fu ba\u011f\u0131ml\u0131l\u0131klar ne kadar azsa, o s\u0131n\u0131f\u0131 de\u011fi\u015ftirmek, geni\u015fletmek veya yeniden kullanmak o kadar kolay olacakt\u0131r.<\/em><\/p><\/blockquote>\n<p>Mediator tasar\u0131m kal\u0131b\u0131 ise bu kaotik gidi\u015fat\u0131 a\u015fa\u011f\u0131daki gibi olmas\u0131 gereken hale getirir ve nesneler aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 tek bir merkezden y\u00f6netimi sa\u011flayarak azaltmam\u0131za imkan tan\u0131r.<br \/>\n<div id=\"attachment_20821\" style=\"width: 610px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-1.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20821\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-1.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"600\" height=\"270\" class=\"size-full wp-image-20821\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-1.png 600w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-1-300x135.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><p id=\"caption-attachment-20821\" class=\"wp-caption-text\">Mediator nesnesi arac\u0131l\u0131\u011f\u0131yla t\u00fcm kontroller dolayl\u0131 ileti\u015fim kurmal\u0131d\u0131r.<\/p><\/div>B\u00f6ylece nesnelerin birbirleriyle nas\u0131l konu\u015facaklar\u0131n\u0131 de\u011fil, ne konu\u015facaklar\u0131yla ilgilenen bir tasar\u0131m ger\u00e7ekle\u015ftirilmi\u015f olur. \u0130deal olanda budur!<\/p>\n<p>Mediator, birbirleriyle ileti\u015fimde olmas\u0131 gereken nesnelerin ileti\u015fimlerinin birebir olmas\u0131ndan ziyade, birbirlerinden ba\u011f\u0131ms\u0131z olacak \u015fekilde olmas\u0131n\u0131 \u00f6nerir. \u0130ki nesne aras\u0131nda varsa ileti\u015fim bunun kesilmesini, yerine bu nesnelerin birbirlerine olacak \u00e7a\u011fr\u0131lar\u0131n\u0131 uygun \u015fekilde y\u00f6nlendirecek olan \u00f6zel bir arac\u0131(Mediator) nesnesi \u00fczerinden dolayl\u0131 olarak sa\u011flanmas\u0131n\u0131 ister.<\/p>\n<blockquote><p><em style=\"color:green;\">Mediator modeli, tek bir arac\u0131(mediator) nesnesi i\u00e7erisinde \u00e7e\u015fitli nesneler aras\u0131ndaki karma\u015f\u0131k ili\u015fkiler a\u011f\u0131n\u0131 y\u00f6netmenize olanak tan\u0131r.<\/em><\/p><\/blockquote>\n<h3 style=\"color:#e83e8c;\">Ger\u00e7ek D\u00fcnya Analojisi<\/h3>\n<p><div id=\"attachment_20828\" style=\"width: 380px\" class=\"wp-caption alignleft\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-2.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-20828\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-2.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"370\" height=\"200\" class=\"size-full wp-image-20828\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-2.png 370w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-2-300x162.png 300w\" sizes=\"auto, (max-width: 370px) 100vw, 370px\" \/><\/a><p id=\"caption-attachment-20828\" class=\"wp-caption-text\">U\u00e7ak pilotlar\u0131, bir sonraki u\u00e7a\u011fa kimin inece\u011fine karar verirken birbirleriyle do\u011frudan konu\u015fmazlar. T\u00fcm ileti\u015fim kontrol kulesiyle ger\u00e7ekle\u015ftirilir.<\/p><\/div>Mediator deyince genellikle u\u00e7aklar\u0131n birbirleriyle olan haberle\u015fmesi \u00fczerinden \u00f6rneklendirme yap\u0131l\u0131r. Eee haliyle bu da durumu \u00f6zetleyebilmemizi sa\u011flayan g\u00fczel bir arg\u00fcmand\u0131r. Lakin bu i\u00e7eri\u011fimizde pratiksel olarak \u00e7ok farkl\u0131 \u00f6rnekler \u00fczerinden mediator senaryolar\u0131 ele alaca\u011f\u0131m. \u015eimdilik gelin, ilk olarak ger\u00e7ek d\u00fcnya analojisinde genelin kabul etti\u011fi u\u00e7ak metaforunu ele alal\u0131m&#8230;<\/p>\n<p>Havaalan\u0131 ini\u015f pistine yakla\u015fan yahut kalk\u0131\u015fa haz\u0131rlanan u\u00e7aklar, davran\u0131\u015flar\u0131n\u0131 di\u011fer u\u00e7aklar\u0131n durumuna g\u00f6re belirlemek ve uygunsa e\u011fer aksiyon almak mecburiyetindedirler. \u0130\u015fte hal b\u00f6yleyken u\u00e7aklar birbirleriyle ileti\u015fim kurmaktansa kule vas\u0131tas\u0131yla ileti\u015fimlerini merkezi olarak sa\u011flamaktad\u0131rlar. Neden mi? \u00c7\u00fcnk\u00fc her bir u\u00e7ak bir di\u011feriyle ileti\u015fim kurmaya kalkarsa e\u011fer inan\u0131lmaz bir kar\u0131\u015f\u0131kl\u0131k ve ba\u015fta da s\u00f6yledi\u011fimiz gibi kaotik durum s\u00f6z konusu olacakt\u0131r.<\/p>\n<ul style=\"font-size:11px;\">\n<li><em><strong>Pilot R\u0131fk\u0131<\/strong><\/em>, Arif nerdesin lan ben iniyorum<\/li>\n<li><em><strong>Pilot Arif<\/strong><\/em>, olum nereye iniyorsun Hilmi daha kalkmad\u0131<\/li>\n<li><em><strong>Pilot Muiddin<\/strong><\/em>, abi kusura bakmay\u0131n \u00f6nce ben geldim<\/li>\n<li><em><strong>Pilot \u015euayip<\/strong><\/em>, ho\u015f geldin garda\u015f\u0131m<\/li>\n<li><em><strong>Pilot R\u0131fk\u0131<\/strong><\/em>, lan olum nereye \u00f6nce sen geldin, Hilmi kalksana lan ordan<\/li>\n<li><em><strong>Pilot Muiddin<\/strong><\/em>, tamam ne ba\u0131r\u0131yosun senn \u00f6nce in<\/li>\n<li><em><strong>Pilot Temel<\/strong><\/em>, ha\u00e7e u\u015faklar bu Trabzon havalimani nerededur!<\/li>\n<li><em><strong>Pilot Arif<\/strong><\/em>, abi yanl\u0131\u015f yere gitmi\u015fsin, oras\u0131 Irak m*<\/li>\n<li><em><strong>Pilot Temel<\/strong><\/em>, hee d\u00fcnya yuvarlak ya! tam tersine gidince yine Trabzon \u00e7\u0131kayi dediler, <\/li>\n<li><em><strong>Pilot Hilmi<\/strong><\/em>, ben kalk\u0131yorum \u015euayip abi<\/li>\n<li><em><strong>Pilot \u015euayip<\/strong><\/em>, banane lan senin kalk\u0131p kalkmad\u0131\u011f\u0131ndan \ud83d\ude12<\/li>\n<li>vs<\/li>\n<li>vs<\/li>\n<\/ul>\n<p>Anlayaca\u011f\u0131n\u0131z bu tarz muhabbetlerin s\u00fcrmemesi i\u00e7in u\u00e7aklar aras\u0131 t\u00fcm ileti\u015fim kule arac\u0131l\u0131\u011f\u0131yla ger\u00e7ekle\u015ftirilmekte ve yap\u0131lacak aksiyona g\u00f6re karar mekanizmas\u0131 tek elden y\u00f6netilmektedir. Haliyle u\u00e7aklar kule vas\u0131tas\u0131yla hava trafik kontrol\u00fcn\u00fc sa\u011flayacaklar\u0131ndan dolay\u0131, di\u011fer u\u00e7aklar\u0131n ne yapt\u0131\u011f\u0131 yahut nas\u0131l aksiyon alaca\u011f\u0131yla de\u011fil bizzat kendi davran\u0131\u015f\u0131yla ilgilenmi\u015f olacakt\u0131r.<\/p>\n<p>\u015eimdi konuyu teoride daha iyi anlayabilmek i\u00e7in bir ba\u015fka \u00f6rnek \u00fczerinden analoji ger\u00e7ekle\u015ftirelim. Bir sistemdeki kullan\u0131c\u0131lar\u0131n belli ba\u015fl\u0131 gruplara dahil oldu\u011funu d\u00fc\u015f\u00fcnelim ve her kullan\u0131c\u0131n\u0131n bir veya daha fazla grubun \u00fcyesi olabilece\u011fini ve ayn\u0131 \u015fekilde her gruba hi\u00e7 kullan\u0131c\u0131 \u00fcye olmayaca\u011f\u0131 gibi bir veya birden fazla \u00fcye olabilece\u011fini varsayal\u0131m.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-3.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"200\" height=\"200\" class=\"alignleft size-full wp-image-20840\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-3-150x150.png 150w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-3-160x160.png 160w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a>Bu ihtiyac\u0131 yandaki gibi \u00e7\u00f6z\u00fcmledi\u011fimiz durumda <u>arapsa\u00e7\u0131<\/u> tabirinin tam kar\u015f\u0131l\u0131\u011f\u0131n\u0131 g\u00f6rm\u00fc\u015f olaca\u011f\u0131z. D\u00fc\u015f\u00fcnsenize, bu \u015fekilde yap\u0131lan bir modellemede herhangi bir grubun \u00fczerinde de\u011fi\u015fiklik ihtiyac\u0131 oldu\u011fu zaman t\u00fcm kullan\u0131c\u0131lar istemsizce bu de\u011fi\u015fiklikten etkilenecektir! Ne kadar k\u00f6t\u00fc! &nbsp;<br \/>&nbsp;<br \/>&nbsp;<br \/>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-4.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"200\" height=\"200\" class=\"alignright size-full wp-image-20841\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-4-150x150.png 150w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-4-160x160.png 160w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><\/a>Halbuki bu modellemeyi yandaki gibi merkezi bir s\u0131n\u0131f \u00fczerinden ger\u00e7ekle\u015ftirip, kullan\u0131c\u0131lar ile gruplar aras\u0131ndaki ili\u015fkiyi soyutlad\u0131\u011f\u0131m\u0131zda olduk\u00e7a avantajl\u0131 bir tasar\u0131m kar\u015f\u0131m\u0131za \u00e7\u0131kmaktad\u0131r. B\u00f6yle bir tasar\u0131mda yap\u0131lacak t\u00fcm de\u011fi\u015fiklikler kolayca ger\u00e7ekle\u015ftirilebilir.<\/p>\n<p>Bir sistemi bir\u00e7ok nesneye b\u00f6lmek\/par\u00e7alamak genellikle yeniden kullan\u0131labilirli\u011fi(reusability) artt\u0131r\u0131r. Ancak bu nesneler aras\u0131nda artan ili\u015fkisel ba\u011flar, tekrar kullan\u0131labilirlik a\u00e7\u0131s\u0131ndan negatif etki g\u00f6sterir. Mediator nesnesi, nesneler aras\u0131ndaki t\u00fcm ili\u015fkileri kaps\u00fclleyerek, ileti\u015fim merkezi g\u00f6revi g\u00f6r\u00fcr. Etkile\u015fimleri kontrol ve koordine etmekten sorumludur. Ayr\u0131ca nesnelerin a\u00e7\u0131k\u00e7a birbirlerine referansta bulunmas\u0131n\u0131 engelleyerek gev\u015fek ba\u011flanmay\u0131 te\u015fvik eder.<\/p>\n<h3 style=\"color:#e83e8c;\">Mediator Anatomisi<\/h3>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-5.png\" alt=\"\" width=\"634\" height=\"192\" class=\"aligncenter size-full wp-image-20852\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-5.png 634w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-5-300x91.png 300w\" sizes=\"auto, (max-width: 634px) 100vw, 634px\" \/><\/a><br \/>\nMediator tasar\u0131m\u0131 yukar\u0131daki diyagramda da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere; &#8216;<strong><em>Mediator<\/em><\/strong>&#8216;, &#8216;<strong><em>Colleague<\/em><\/strong>&#8216;, &#8216;<strong><em>Concrete Mediator<\/em><\/strong>&#8216; ve &#8216;<strong><em>Concrete Colleague<\/em><\/strong>&#8216; akt\u00f6rlerinin bir araya gelmesiyle olu\u015fturulur.<\/p>\n<p>\u015eimdi gelin bu akt\u00f6rlerin kim olduklar\u0131n\u0131 sorumluluklar\u0131yla beraber inceleyelim;<\/p>\n<ul>\n<li><strong><em>Mediator<\/em><\/strong><br \/>\nNesneler aras\u0131nda arac\u0131 i\u015flevini g\u00f6recek olan Mediator nesnesinin aray\u00fcz\u00fcd\u00fcr.\n<\/li>\n<li><strong><em>Concrete Mediator<\/em><\/strong><br \/>\nMediator aray\u00fcz\u00fcnden t\u00fcremi\u015f olan ve nesneler aras\u0131 haberle\u015fmeden sorumlu olan somut s\u0131n\u0131f. \u0130\u00e7erisinde haberle\u015fmelerini sa\u011flayaca\u011f\u0131 <em>Colleague<\/em> referanslar\u0131n\u0131 tutar ve gerekli i\u015flevselli\u011fi sa\u011flar.\n<\/li>\n<li><strong><em>Colleague<\/em><\/strong><br \/>\nAralar\u0131nda ileti\u015fim\/haberle\u015fme sa\u011flayacak olan nesnelerin uygulayaca\u011f\u0131 aray\u00fczd\u00fcr. Kendi i\u00e7lerinde <em>Concrete Mediator<\/em> referans\u0131 tutarlar. B\u00f6ylece hangi arac\u0131 sayesinde di\u011fer nesnelerle dolayl\u0131ca ileti\u015fim kurduklar\u0131n\u0131 bilirler.\n<\/li>\n<li><strong><em>Concrete Colleague<\/em><\/strong><br \/>\n<em>Colleague<\/em> aray\u00fcz\u00fcn\u00fc uygulam\u0131\u015f ve birbirleriyle ilet\u015fim\/haberle\u015fme sa\u011flayacak olan somut nesnelerdir.\n<\/li>\n<\/ul>\n<h3 style=\"color:#e83e8c;\">Mediator Stratejisinin Uygulanmas\u0131<\/h3>\n<p>Mediator stratejisinin nas\u0131l uyguland\u0131\u011f\u0131n\u0131 izah edebilmek i\u00e7in belli ba\u015fl\u0131 senaryolar \u00fczerinden konuyu ele almakta fayda olaca\u011f\u0131 kanaatindeyim. Bunun i\u00e7in sizlere birbirinden farkl\u0131 \u00fc\u00e7 senaryo \u00fczerinden anlat\u0131m sergilemeye \u00e7al\u0131\u015faca\u011f\u0131m. \u015eimdi gelin 1. senaryodan konuyu pratikte inceleyelim;<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"font-size:15px;color:red;\">SENARYO 1<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"font-size:12px;color:white;background-color:gray;\">Bir bilgisayardaki \u00e7e\u015fitli birimler aras\u0131ndaki etkile\u015fimlerin esas olarak anakart \u00fczerinden yap\u0131ld\u0131\u011f\u0131n\u0131 hepimiz biliyoruz. E\u011fer anakart olmasayd\u0131, bu birimlerin etkile\u015fime girebilmesi i\u00e7in birbirleriyle haberle\u015fmesi gerekecekti. B\u00f6yle bir durumda ise olduk\u00e7a kar\u0131\u015f\u0131kl\u0131k s\u00f6z konusu olaca\u011f\u0131 a\u015fikar. Dolay\u0131s\u0131yla her birim sade ve sadece anakartla etkile\u015fime girerek, birimler aras\u0131ndaki haberle\u015fme sorumlulu\u011funu anakarta y\u00fcklemesi gerekmektedir. B\u00f6ylece ihtiya\u00e7 do\u011frultusunda hangi birimin kiminle ne \u015fekilde etkile\u015fime girece\u011fini ve nas\u0131l \u00e7al\u0131\u015faca\u011f\u0131n\u0131 sadece anakart bilecektir.<\/p>\n<p>Bu senaryoda, CDDriver&#8217;a tak\u0131lan bir CD&#8217;de ki verilerin CPU&#8217;ya aktar\u0131l\u0131p ard\u0131ndan ses ve ekran kartlar\u0131na ayr\u0131\u015ft\u0131r\u0131lmas\u0131 s\u00fcre\u00e7lerini Mediator tasar\u0131m deseniyle modelliyor olaca\u011f\u0131z. CDDriver ile CD&#8217;den al\u0131nan\/okunan verileri anakart CPU&#8217;ya g\u00f6nderip, i\u015fletecektir. Bunun i\u00e7in CDDriver&#8217;\u0131n anakarta durumunun de\u011fi\u015fti\u011fini bildirmesi yeterli olacakt\u0131r. Ayn\u0131 \u015fekilde CPU ald\u0131\u011f\u0131 verileri video ve ses verilerine b\u00f6l\u00fc\u015ft\u00fcrerek anakart vas\u0131tas\u0131yla ekran ve ses kartlar\u0131na g\u00f6nderecektir. Yine bu i\u015flem i\u00e7in CPU&#8217;nun da anakarta durumunun de\u011fi\u015fti\u011fini bildirmesi gerekecektir. Nihai olarak, anakart vas\u0131tas\u0131yla CD&#8217;de ki veriler ekran ve ses kartlar\u0131na ula\u015fm\u0131\u015f ve i\u015flenmi\u015f olacakt\u0131r.\n<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size:12px;\">\n<table>\n<thead>\n<tr>\n<th colspan=\"2\">Akt\u00f6rler &#038; Roller<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Anakart<\/td>\n<td>Mediator<\/td>\n<\/tr>\n<tr>\n<td>CDDriver<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Ses Kart\u0131<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Ekran Kart\u0131<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 style=\"font-size:15px;color:red;text-align:center;\">SENARYO 1 \u00c7\u00d6Z\u00dcM<\/h5>\n<ul>\n<li><strong>Ad\u0131m 1<\/strong><br \/>\nHer \u015feyden \u00f6nce Mediator aray\u00fcz\u00fcn\u00fc olu\u015fturarak ba\u015flayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Mediator Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public interface IAnakart\r\n    {\r\n        void Degistir(Birim birim);\r\n    }\r\n<\/pre>\n<p>Dikkat ederseniz bu aray\u00fcz, aralar\u0131nda ileti\u015fim kurulacak olan nesnelerin(Birim) birbirleriyle haberle\u015fmesini sa\u011flayacak olan &#8216;Degistir&#8217; imzas\u0131n\u0131 bar\u0131nd\u0131rmaktad\u0131r. Ne zaman herhangi, bir Colleague taraf\u0131ndan bu &#8216;Degistir&#8217; fonksiyonu tetiklensin, o zaman Mediator di\u011fer nesneyle etkile\u015fim kuracak ve tetikleyecektir.<\/p>\n<p>Ayr\u0131ca Mediator aray\u00fcz\u00fc \u00f6rnekte oldu\u011fu gibi interface olabilece\u011fi gibi abstract class olarakta tan\u0131mlanabilmektedir.\n<\/li>\n<li><strong>Ad\u0131m 2<\/strong><br \/>\nHemen akabinde Colleague aray\u00fcz\u00fcn\u00fc olu\u015fturmam\u0131z yerinde olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Colleague Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public abstract class Birim\r\n    {\r\n        protected IAnakart _anakart;\r\n        public Birim(IAnakart anakart)\r\n        {\r\n            _anakart = anakart;\r\n        }\r\n    }\r\n<\/pre>\n<p>Colleague aray\u00fcz\u00fc yukar\u0131da oldu\u011fu gibi i\u00e7erisinde Mediator aray\u00fcz\u00fcnden bir referans tutmal\u0131d\u0131r.\n<\/li>\n<li><strong>Ad\u0131m 3<\/strong><br \/>\nS\u0131rada Concrete Colleague nesnelerinin olu\u015fturmas\u0131 gerekmektedir.<\/p>\n<p>CDDriver : CD&#8217;de ki (farazi)datalar\u0131 okuyarak anakart\u0131 bilgilendiriyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class CDDriver : Birim\r\n    {\r\n        public CDDriver(IAnakart anakart) : base(anakart)\r\n        {\r\n        }\r\n        string _cdData;\r\n        public string CDData =&gt; _cdData;\r\n        public void CDOku()\r\n        {\r\n            _cdData = &quot;g\u00f6r\u00fcnt\u00fc1,g\u00f6r\u00fcnt\u00fc2,g\u00f6r\u00fcnt\u00fc3*ses1,ses2,ses3&quot;;\r\n            _anakart.Degistir(this);\r\n        }\r\n    }\r\n<\/pre>\n<p>CPU : CD&#8217;den gelen verileri ses ve video datalar\u0131na ayr\u0131\u015ft\u0131rarak anakart vas\u0131tas\u0131yla ekran kart\u0131 ve ses kart\u0131na g\u00f6nderiyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class CPU : Birim\r\n    {\r\n        public CPU(IAnakart anakart) : base(anakart)\r\n        {\r\n        }\r\n        string _videoData, _sesData;\r\n        public string VideoData =&gt; _videoData;\r\n        public string SesData =&gt; _sesData;\r\n        public void DataIsle(string cdData)\r\n        {\r\n            string&#x5B;] array = cdData.Split(&quot;*&quot;);\r\n            _videoData = array&#x5B;0]; \/\/g\u00f6r\u00fcnt\u00fc de\u011ferleri video data olarak al\u0131n\u0131yor.\r\n            _sesData = array&#x5B;1]; \/\/ses de\u011ferleri ses data olarak al\u0131n\u0131yor.\r\n            _anakart.Degistir(this);\r\n        }\r\n    }\r\n<\/pre>\n<p>Ekran Karti : CPU&#8217;dan gelen video datalar\u0131n\u0131 i\u015fliyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class EkranKarti : Birim\r\n    {\r\n        public EkranKarti(IAnakart anakart) : base(anakart)\r\n        {\r\n        }\r\n        public void GorselVer(string videoData)\r\n        {\r\n            string&#x5B;] datas = videoData.Split(&quot;,&quot;);\r\n            foreach (string data in datas)\r\n                Console.WriteLine($&quot;Gelen g\u00f6r\u00fcnt\u00fc : {data}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<p>Ses Karti : CPU&#8217;dan gelen ses datalar\u0131n\u0131 i\u015fliyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class SesKarti : Birim\r\n    {\r\n        public SesKarti(IAnakart anakart) : base(anakart)\r\n        {\r\n        }\r\n        public void SesVer(string sesData)\r\n        {\r\n            string&#x5B;] datas = sesData.Split(&quot;,&quot;);\r\n            foreach (string data in datas)\r\n                Console.WriteLine($&quot;Gelen ses : {data}&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 4<\/strong><br \/>\n\u015eimdi t\u00fcm bu Colleague nesnelerinin olmas\u0131 gereken ileti\u015fimlerini davran\u0131\u015fsal olarak tasarlayan ve somut arac\u0131 sorumlulu\u011funu \u00fcstlenecek olan Concrete Mediator s\u0131n\u0131f\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Mediator\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Anakart : IAnakart\r\n    {\r\n        CDDriver _cdDriver;\r\n        CPU _cpu;\r\n        EkranKarti _ekranKarti;\r\n        SesKarti _sesKarti;\r\n\r\n        public CDDriver CDDriver { set =&gt; _cdDriver = value; }\r\n        public CPU CPU { set =&gt; _cpu = value; }\r\n        public EkranKarti EkranKarti { set =&gt; _ekranKarti = value; }\r\n        public SesKarti SesKarti { set =&gt; _sesKarti = value; }\r\n\r\n        public void Degistir(Birim birim)\r\n        {\r\n            if (birim is CDDriver)\r\n            {\r\n                string cdData = _cdDriver.CDData;\r\n                _cpu.DataIsle(cdData);\r\n            }\r\n            else if (birim is CPU)\r\n            {\r\n                string videoData = _cpu.VideoData, sesData = _cpu.SesData;\r\n                _ekranKarti.GorselVer(videoData);\r\n                _sesKarti.SesVer(sesData);\r\n            }\r\n        }\r\n    }\r\n<\/pre>\n<p>Mediator s\u0131n\u0131f\u0131 aralar\u0131ndaki haberle\u015fmeyi sa\u011flayaca\u011f\u0131 t\u00fcm Colleague s\u0131n\u0131flar\u0131n\u0131 bilmek ister. Dolay\u0131s\u0131yla bu s\u0131n\u0131f\u0131n yap\u0131s\u0131na g\u00f6z atarsan\u0131z, <em><strong>6<\/strong><\/em> ile <em><strong>9.<\/strong><\/em> sat\u0131r aral\u0131\u011f\u0131nda sistemdeki t\u00fcm birimlerin referanslar\u0131 tan\u0131mlanm\u0131\u015ft\u0131r. <em><strong>11<\/strong><\/em> ile <em><strong>14.<\/strong><\/em> sat\u0131r aral\u0131\u011f\u0131nda ise bu nesneleri set edebilece\u011fimiz property&#8217;ler tan\u0131mlanm\u0131\u015ft\u0131r. Tabi bunlar istek yahut ihtiya\u00e7 do\u011frultusunda metot olarak da tan\u0131mlanabilirler.<\/p>\n<p>&#8216;Degistir&#8217; metoduna nazar eylerseniz e\u011fer art\u0131k hangi birim taraf\u0131ndan bir bildiri geliyorsa i\u00e7eride ay\u0131rt edilmekte ve yap\u0131lacak i\u015f\/davran\u0131\u015f duruma g\u00f6re i\u015flenmektedir. Dolay\u0131s\u0131yla bu s\u0131n\u0131f nesneler aras\u0131ndaki haberle\u015fme g\u00f6revini b\u00f6ylece yerine getirmektedir.\n<\/li>\n<li><strong>Ad\u0131m 5<\/strong><br \/>\nSonu\u00e7 olarak uygulanan Mediator desenini a\u015fa\u011f\u0131daki gibi kullanarak, test edelim.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6.png\" alt=\"\" width=\"446\" height=\"450\" class=\"aligncenter size-full wp-image-20886\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6.png 446w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6-297x300.png 297w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6-150x150.png 150w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-6-160x160.png 160w\" sizes=\"auto, (max-width: 446px) 100vw, 446px\" \/><\/a><br \/>\nG\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere CDDriver ile CD&#8217;den okunan verilerin s\u0131rayla CPU -> Ekran Kart\u0131 -> Ses Kart\u0131 silsilesi \u015feklinde ak\u0131\u015f\u0131n\u0131 Mediator(Anakart) nesnesi sayesinde tek elden y\u00f6netebilmi\u015f bulunmaktay\u0131z.\n<\/li>\n<\/ul>\n<p>\u0130\u015fte bu kadar&#8230; \u015eimdi 2. senaryoya ge\u00e7ebiliriz.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"font-size:15px;color:red;\">SENARYO 2<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"font-size:12px;color:white;background-color:gray;\">\u015eehirler aras\u0131 nakliye firmalar\u0131n\u0131 d\u00fc\u015f\u00fcnelim. \u00d6rne\u011fin; I\u011fd\u0131r&#8217;dan Edirne&#8217;ye ta\u015f\u0131nacak bir ailenin e\u015fyalar\u0131n\u0131 nakliye edebilmek i\u00e7in \u00fc\u00e7 farkl\u0131 \u015fehirde aktarmal\u0131 lojistik firmalar\u0131 g\u00f6rev al\u0131yor olsun.<\/p>\n<p>I\u011fd\u0131r&#8217;dan S\u0131vas&#8217;a &#8220;X Firma&#8221;s\u0131,<br \/>\nSivas&#8217;tan Ankara&#8217;ya &#8220;Y Firma&#8221;s\u0131 ve<br \/>\nAnkara&#8217;dan Edirne&#8217;ye &#8220;Z Firmas\u0131&#8221; nakliye operasyonunda bulunuyor olsun.\n<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size:12px;\">\n<table>\n<thead>\n<tr>\n<th colspan=\"2\">Akt\u00f6rler &#038; Roller<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Nakliye<\/td>\n<td>Mediator<\/td>\n<\/tr>\n<tr>\n<td>X Firma<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Y Firma<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Z Firma<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 style=\"font-size:15px;color:red;text-align:center;\">SENARYO 2 \u00c7\u00d6Z\u00dcM<\/h5>\n<ul>\n<li><strong>Ad\u0131m 1<\/strong><br \/>\nMediator aray\u00fcz\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Mediator Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public interface INakliye\r\n    {\r\n        void MaliDevret(Firma firma);\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 2<\/strong><br \/>\nColleague aray\u00fcz\u00fcn\u00fc olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Colleague Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public abstract class Firma\r\n    {\r\n        protected INakliye _nakliye;\r\n\r\n        protected Firma(INakliye nakliye)\r\n        {\r\n            _nakliye = nakliye;\r\n        }\r\n        public abstract void NakliyeyeBasla();\r\n    }\r\n<\/pre>\n<p>Bu senaryoda tan\u0131mlanan Colleague aray\u00fcz\u00fcn\u00fc incelerseniz e\u011fer i\u00e7erisinde abstract &#8216;NakliyeyeBasla&#8217; fonksiyonu bar\u0131nd\u0131rmaktad\u0131r. \u00c7\u00fcnk\u00fc t\u00fcm firmalar ayn\u0131 i\u015fi yapacak, mal\u0131 alacak ve nakliye i\u015flemine devam edecektir. Dolay\u0131s\u0131yla bunun i\u00e7in t\u00fcm Colleague s\u0131n\u0131flar\u0131nda ortak bir imza olmas\u0131 yerinde bir tasar\u0131m olacakt\u0131r. Yani buradan da g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere bir tasar\u0131m\u0131 uygularken riayet edilecek olan sadece genel stratejidir. \u0130htiya\u00e7 do\u011frultusunda bu ve buna benzer taktiksel yap\u0131lanmalar tabi ki de yap\u0131lmal\u0131d\u0131r, yap\u0131lacakt\u0131r.\n<\/li>\n<li><strong>Ad\u0131m 3<\/strong><br \/>\nFirmalara kar\u015f\u0131l\u0131k gelecek olan somut Colleague s\u0131n\u0131flar\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class XFirma : Firma\r\n    {\r\n        public XFirma(INakliye nakliye) : base(nakliye)\r\n        {\r\n        }\r\n        public override void NakliyeyeBasla()\r\n        {\r\n            Console.WriteLine(&quot;I\u011fd\u0131r'dan e\u015fyalar y\u00fcklendi.&quot;);\r\n            _nakliye.MaliDevret(this);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class YFirma : Firma\r\n    {\r\n        public YFirma(INakliye nakliye) : base(nakliye)\r\n        {\r\n        }\r\n        public override void NakliyeyeBasla()\r\n        {\r\n            Console.WriteLine(&quot;Sivas'tan e\u015fyalar y\u00fcklendi.&quot;);\r\n            _nakliye.MaliDevret(this);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class ZFirma : Firma\r\n    {\r\n        public ZFirma(INakliye nakliye) : base(nakliye)\r\n        {\r\n        }\r\n        public override void NakliyeyeBasla()\r\n        {\r\n            Console.WriteLine(&quot;Ankara'dan e\u015fyalar y\u00fcklendi.&quot;);\r\n            _nakliye.MaliDevret(this);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 4<\/strong><br \/>\nArt\u0131k ilgili nesnelerin aralar\u0131ndaki ileti\u015fimi sa\u011flayacak ve davran\u0131\u015flar\u0131n\u0131 y\u00f6netecek olan somut Mediator nesnesini tasarlayal\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Mediator\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Nakliye : INakliye\r\n    {\r\n        XFirma _xfirma;\r\n        YFirma _yfirma;\r\n        ZFirma _zfirma;\r\n        public XFirma XFirma { set =&gt; _xfirma = value; }\r\n        public YFirma YFirma { set =&gt; _yfirma = value; }\r\n        public ZFirma ZFirma { set =&gt; _zfirma = value; }\r\n        public void MaliDevret(Firma firma)\r\n        {\r\n            if (firma is XFirma)\r\n            {\r\n                Console.WriteLine(&quot;E\u015fyalar Sivas'ta tekrar nakledilmek \u00fczere indirildi.\\n&quot;);\r\n                _yfirma.NakliyeyeBasla();\r\n            }\r\n            else if (firma is YFirma)\r\n            {\r\n                Console.WriteLine(&quot;E\u015fyalar Ankara'da tekrar nakledilmek \u00fczere indirildi.\\n&quot;);\r\n                _zfirma.NakliyeyeBasla();\r\n            }\r\n            else\r\n                Console.WriteLine(&quot;E\u015fyalar Edirne'ye vard\u0131 \u00e7ok \u015f\u00fck\u00fcr...&quot;);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 5<\/strong><br \/>\nSonu\u00e7 olarak yap\u0131y\u0131 kullanarak \u00e7al\u0131\u015fmam\u0131z\u0131 yapal\u0131m ve test edelim.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-7.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-7.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"429\" height=\"417\" class=\"aligncenter size-full wp-image-20896\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-7.png 429w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-7-300x292.png 300w\" sizes=\"auto, (max-width: 429px) 100vw, 429px\" \/><\/a>\n<\/li>\n<\/ul>\n<p>Evet&#8230; \u0130\u015fte b\u00f6yle \ud83d\ude42 Hadi gelin, haz\u0131r \u0131s\u0131nm\u0131\u015fken bir sonraki senaryoyu inceleyelim.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"font-size:15px;color:red;\">SENARYO 3<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"font-size:12px;color:white;background-color:gray;\">Bu senaryomuzda bir konut al\u0131m sat\u0131m s\u00fcrecindeki para transferini ele al\u0131yor olaca\u011f\u0131z. Yap\u0131lan antla\u015fma neticesinde; al\u0131c\u0131, emlak\u00e7\u0131 ve ev sahibi aras\u0131nda yap\u0131lacak olan para transferi \u015fu \u015fekilde ger\u00e7ekle\u015fecektir;<br \/>\nAl\u0131c\u0131, e\u011fer konutun fiyat\u0131 100.000 TL&#8217;den b\u00fcy\u00fckse paray\u0131 sat\u0131c\u0131ya g\u00f6nderecek ve ard\u0131ndan sat\u0131c\u0131 emlak\u00e7\u0131ya %3&#8217;l\u00fck komisyonu cebinden verecek.. Yok e\u011fer konutun fiyat\u0131 100.000 TL&#8217;den k\u00fc\u00e7\u00fckse al\u0131c\u0131, emlak\u00e7\u0131n\u0131n %10&#8217;luk komisyonunu cebinden verecek ve biryandan da konutun tam paras\u0131n\u0131 sat\u0131c\u0131ya g\u00f6nderecektir.<\/p>\n<p>Normal \u015fartlarda bu operasyonu nesneler aras\u0131nda birebir ileti\u015fim kurarak ger\u00e7ekle\u015ftirmeye \u00e7al\u0131\u015fmak Suriye meselesinden hallice olacakt\u0131r. \u0130\u015fte burada Mediator deseni bi\u00e7ilmi\u015f kaftand\u0131r.\n<\/td>\n<\/tr>\n<tr>\n<td style=\"font-size:12px;\">\n<table>\n<thead>\n<tr>\n<th colspan=\"2\">Akt\u00f6rler &#038; Roller<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Transfer<\/td>\n<td>Mediator<\/td>\n<\/tr>\n<tr>\n<td>Al\u0131c\u0131<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Emlak\u00e7\u0131<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<tr>\n<td>Sat\u0131c\u0131<\/td>\n<td>Colleague<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 style=\"font-size:15px;color:red;text-align:center;\">SENARYO 3 \u00c7\u00d6Z\u00dcM<\/h5>\n<ul>\n<li><strong>Ad\u0131m 1<\/strong><br \/>\nHer zamanki gibi Mediator aray\u00fcz\u00fc olu\u015fturarak ba\u015fl\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Mediator Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public interface ITransfer\r\n    {\r\n        void ParaGonder(Kisi kisi, int tutar);\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 2<\/strong><br \/>\nArd\u0131ndan soyut Colleague s\u0131n\u0131f\u0131n\u0131 tasarl\u0131yoruz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Aray\u00fcz\u00fc\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public abstract class Kisi\r\n    {\r\n        protected ITransfer _transfer;\r\n        protected Kisi(ITransfer transfer)\r\n        {\r\n            _transfer = transfer;\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 3<\/strong><br \/>\nConcrete Colleague s\u0131n\u0131flar\u0131m\u0131z\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Alici : Kisi\r\n    {\r\n        public Alici(ITransfer transfer) : base(transfer)\r\n        {\r\n        }\r\n\r\n        public void KonutParasiOde(int tutar)\r\n        {\r\n            Console.WriteLine(&quot;Al\u0131c\u0131 : \u00d6deme yap\u0131lm\u0131\u015ft\u0131r.&quot;);\r\n            _transfer.ParaGonder(this, tutar);\r\n        }\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Emlakci : Kisi\r\n    {\r\n        public Emlakci(ITransfer transfer) : base(transfer)\r\n        {\r\n        }\r\n\r\n        public void KomisyonAl(int tutar)\r\n            =&gt; Console.WriteLine($&quot;Emlak\u00e7\u0131 : {tutar} TL kadar komisyon al\u0131nm\u0131\u015ft\u0131r.&quot;);\r\n    }\r\n<\/pre>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Colleague\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Satici : Kisi\r\n    {\r\n        public Satici(ITransfer transfer) : base(transfer)\r\n        {\r\n        }\r\n\r\n        public void ParaAl(int tutar)\r\n        {\r\n            Console.WriteLine($&quot;Sat\u0131c\u0131 : {tutar} TL kadar konut bedeli al\u0131nm\u0131\u015ft\u0131r.&quot;);\r\n            _transfer.ParaGonder(this, tutar);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 4<\/strong><br \/>\nVe ard\u0131ndan t\u00fcm bu nesneleri organize edecek olan somut Mediator nesnesini olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ Concrete Mediator\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public class Transfer : ITransfer\r\n    {\r\n        Alici alici;\r\n        Emlakci emlakci;\r\n        Satici satici;\r\n\r\n        public Alici Alici { set =&gt; alici = value; }\r\n        public Emlakci Emlakci { set =&gt; emlakci = value; }\r\n        public Satici Satici { set =&gt; satici = value; }\r\n\r\n        public void ParaGonder(Kisi kisi, int tutar)\r\n        {\r\n            if (kisi is Alici &amp;&amp; tutar &gt; 100000)\r\n                satici.ParaAl(tutar);\r\n            else if (kisi is Alici &amp;&amp; tutar &lt;= 100000)\r\n            {\r\n                emlakci.KomisyonAl(tutar * 10 \/ 100);\r\n                satici.ParaAl(tutar);\r\n            }\r\n            else if (kisi is Satici &amp;&amp; tutar &gt; 100000)\r\n                emlakci.KomisyonAl(tutar * 3 \/ 100);\r\n        }\r\n    }\r\n<\/pre>\n<\/li>\n<li><strong>Ad\u0131m 5<\/strong><br \/>\nTest edelim.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-8.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-8.png\" alt=\"C# Mediator Design Pattern(Mediator Tasar\u0131m Deseni)\" width=\"408\" height=\"430\" class=\"aligncenter size-full wp-image-20901\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-8.png 408w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/C-Mediator-Design-PatternMediator-Tasarim-Deseni-8-285x300.png 285w\" sizes=\"auto, (max-width: 408px) 100vw, 408px\" \/><\/a>\n<\/li>\n<\/ul>\n<p>\u0130\u015fte bu kadar&#8230;<\/p>\n<p>Haliyle Mediator tasar\u0131m desenini pratik a\u00e7\u0131dan yeterince ele ald\u0131k kanaatindeyim.<\/p>\n<p>\u015eimdi gelin konuyu teoride toparlayarak makalemizi noktalayal\u0131m.<\/p>\n<h3 style=\"color:#e83e8c;\">Mediator Nerelerde Uygulanmal\u0131?<\/h3>\n<ul>\n<li>Baz\u0131 s\u0131n\u0131flar\u0131n ya da s\u0131n\u0131f gruplar\u0131n\u0131n, bir s\u0131n\u0131fa s\u0131k\u0131ca ba\u011fl\u0131 olduklar\u0131 durumlarda davran\u0131\u015flar\u0131n\u0131 de\u011fi\u015ftirmek inan\u0131lmaz zor olaca\u011f\u0131 i\u00e7in Mediator deseni kullan\u0131labilir.<\/li>\n<li>Bir s\u0131n\u0131f\u0131n, farkl\u0131 s\u0131n\u0131flara ba\u011f\u0131ml\u0131 olmas\u0131 durumundan dolay\u0131 ba\u015fka yerlerde yeniden kullan\u0131labilirli\u011fi olumsuz etkilenecektir. \u0130\u015fte b\u00f6yle bir durumda Mediator deseni kullan\u0131labilir.<\/li>\n<\/ul>\n<h3 style=\"color:#e83e8c;\"><i class=\"fa fa-balance-scale\" aria-hidden=\"true\"><\/i>Mediator Deseninin Art\u0131lar\u0131 ve Eksileri Nelerdir?<\/h3>\n<table>\n<thead>\n<tr>\n<th colspan=\"2\" width=\"50%\">Art\u0131lar\u0131<\/th>\n<th colspan=\"2\">Eksileri<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"><\/i><\/td>\n<td>Nesneler aras\u0131ndaki ili\u015fkiler tek bir yerden(Mediator) y\u00f6netilece\u011fi i\u00e7in her nesne kendi sorumlulu\u011funa odaklanabilir. B\u00f6ylece <a href=\"https:\/\/www.gencayyildiz.com\/blog\/tek-sorumluluk-prensibisingle-responsibility-principle-srp\/\" rel=\"noopener noreferrer\" target=\"_blank\">Tek Sorumluluk Prensibi\/Single Responsibility Principle<\/a> sa\u011flanm\u0131\u015f olunmakta ve ilgili s\u0131n\u0131f tasar\u0131m\u0131n\u0131n anla\u015f\u0131labilirli\u011fi artarak, bak\u0131m\u0131 kolayla\u015fmaktad\u0131r.<\/td>\n<td><i class=\"fa fa-fw fa-times\" aria-hidden=\"true\"><\/i><\/td>\n<td>Zamanla Mediator s\u0131n\u0131f\u0131, \u00e7ok fazla i\u015f\/sorumluluk y\u00fcklenece\u011fi ve haddinden fazla davran\u0131\u015f y\u00f6netece\u011fi i\u00e7in ister istemez bir Tanr\u0131 Nesnesine(God Object) d\u00f6n\u00fc\u015febilir.<\/td>\n<\/tr>\n<tr>\n<td><i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"><\/i><\/td>\n<td>\nMevcut nesneleri de\u011fi\u015ftirmeye gerek kalmaks\u0131z\u0131n uygulamaya yeni nesneler dahil edilebilir. B\u00f6ylece de\u011fi\u015fime kapal\u0131 lakin geli\u015fime a\u00e7\u0131k olacak \u015fekilde bir tasar\u0131m s\u00f6z konusu oldu\u011fundan dolay\u0131 <a href=\"https:\/\/www.gencayyildiz.com\/blog\/acik-kapali-prensibiopen-closed-principle-ocp\/\" rel=\"noopener noreferrer\" target=\"_blank\">A\u00e7\u0131k Kapal\u0131 Prensibi\/Open Closed Principle<\/a> desteklenmektedir.\n<\/td>\n<td><i class=\"fa fa-fw fa-times\" aria-hidden=\"true\"><\/i><\/td>\n<td>Mediator deseni a\u015f\u0131r\u0131 merkezile\u015fme sa\u011flar. Haliyle Mediator sorumlulu\u011funu \u00fcstlenecek olan s\u0131n\u0131f olduk\u00e7a y\u00f6netilmesi ve s\u00fcrd\u00fcr\u00fclmesi zor bir s\u0131n\u0131f olacakt\u0131r.<\/td>\n<\/tr>\n<tr>\n<td><i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"><\/i><\/td>\n<td>\nGeli\u015ftirilen bir kodda \u00e7e\u015fitli nesneler aras\u0131ndaki ili\u015fkiyi ve somut ba\u011flant\u0131lar\u0131 Mediator sayesinde azaltabilir ve b\u00f6ylece y\u00f6netilebilirlik a\u00e7\u0131s\u0131ndan daha kaliteli kodlar geli\u015ftirebilirsiniz.\n<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"><\/i><\/td>\n<td>\nHer bir nesne esas\u0131nda ba\u011f\u0131ms\u0131z bir davran\u0131\u015f sergileyece\u011finden dolay\u0131 tek ba\u015f\u0131na da rahatl\u0131kla kullan\u0131labilmektedir.\n<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><i class=\"fa fa-fw fa-check\" aria-hidden=\"true\"><\/i><\/td>\n<td>\nNesneler aras\u0131nda Gev\u015fek Ba\u011fl\u0131l\u0131k(Loose Coupling) s\u00f6z konusu olmaktad\u0131r.\n<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><em style=\"color:green;\">Veritaban\u0131ndaki many to many ili\u015fkiler Cross Table ile sa\u011flanmaktad\u0131r. Ayn\u0131 mant\u0131kla class&#8217;lar da da bu sorumlulu\u011fu Mediator s\u0131n\u0131f\u0131 \u00fcstlenmektedir.<\/em><\/p><\/blockquote>\n<h3 style=\"color:#e83e8c;\">Mediator \u0130le Benzer Desenler<\/h3>\n<p><strong>Mediator ile Facade Benzerli\u011fi<\/strong><br \/>\nFark ettiniz mi bilmiyorum ama <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-facade-design-patternfacade-tasarim-deseni\/\" rel=\"noopener noreferrer\" target=\"_blank\">Facade Design Pattern(Facade Tasar\u0131m Deseni)<\/a> ile Mediator olduk\u00e7a birbirlerine benzemektedirler. Her ikiside birbirlerine s\u0131k\u0131 s\u0131k\u0131ya ba\u011fl\u0131 olan bir\u00e7ok nesne aras\u0131ndaki diyalo\u011fu d\u00fczenlemeye \u00e7al\u0131\u015fmaktad\u0131rlar.<\/p>\n<p><em>\u0130kisinin aras\u0131ndaki temel fark;<\/em><\/p>\n<p><em><u>Facade;<\/u><\/em> nesnelerin alt sistemlerine basitle\u015ftirilmi\u015f bir aray\u00fcz sa\u011flar. Alt sistemin kendisi Facade aray\u00fcz\u00fcnden habersizdir. Alt sistem i\u00e7erisinde t\u00fcm nesneler do\u011frudan birbirleriyle ileti\u015fim kurabilirler.<br \/>\n<em><u>Mediator;<\/u><\/em> nesneler(sistemler) aras\u0131nda ileti\u015fim merkezidir. Nesneler yaln\u0131zca Mediator nesnesini bilir ve birbirleriyle do\u011frudan ileti\u015fim kurmazlar.<\/p>\n<p><strong>Mediator ile Observer Benzerli\u011fi<\/strong><br \/>\nMediator ile bir di\u011fer benzerlik g\u00f6steren desen ise <a href=\"https:\/\/www.gencayyildiz.com\/blog\/c-observer-design-patternobserver-tasarim-deseni\/\" rel=\"noopener noreferrer\" target=\"_blank\">Observer Design Pattern(Observer Tasar\u0131m Deseni)<\/a>dir. Hatta \u00e7o\u011fu durumda aralar\u0131ndaki fark\u0131 anlamak neredeyse imkans\u0131z olabilece\u011fi i\u00e7in birbirlerinin yerine kullan\u0131labilmektedirler.<\/p>\n<p>Bu iki desen aras\u0131ndaki ince n\u00fcens a\u015fa\u011f\u0131daki gibidir;<\/p>\n<p><em><u>Mediator&#8217;\u0131n<\/u><\/em> birincil amac\u0131 nesneler aras\u0131ndaki kar\u015f\u0131l\u0131kl\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 ortadan kald\u0131rmakt\u0131r. Bunun i\u00e7in bu nesneleri tek bir Mediator nesneye ba\u011f\u0131ml\u0131 hale getiririz.<br \/>\n<em><u>Observer&#8217;\u0131n<\/u><\/em> amac\u0131 ise baz\u0131 nesneler ile onlara ba\u011fl\u0131 olan di\u011fer nesneler aras\u0131nda dinamik tek y\u00f6nl\u00fc ba\u011flant\u0131y\u0131 kurmakt\u0131r.<\/p>\n<p>Evet&#8230; B\u00f6ylece bu makalenin de sonuna gelmi\u015f bulunmaktay\u0131z. Umar\u0131m sizin a\u00e7\u0131n\u0131zdan ayd\u0131nlat\u0131c\u0131 bilgiler sunabilmi\u015fimdir. S\u0131k\u0131lmadan, usanmadan bu sat\u0131rlara kadar ula\u015fabilen de\u011ferli okuyucular\u0131ma en i\u00e7ten te\u015fekk\u00fcrlerimi sunar\u0131m.<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>\u00d6rnek senaryo kodlar\u0131n\u0131 indirebilmek i\u00e7in <a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2021\/02\/MediatorExamples.zip\">buraya<\/a> t\u0131klay\u0131n\u0131z.<\/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 Davran\u0131\u015fsal Tasar\u0131m Kal\u0131plar\u0131ndan(Behavioral Patterns) olan Mediator Tasar\u0131m Desenini(Mediator Design Pattern) bol pratiksel senaryolar e\u015fli\u011finde inceliyor olaca\u011f\u0131z. \u0130\u00e7eri\u011fe ba\u015flamadan \u00f6nce \u015fahsi fikrimi beyan ederek bir girizg\u00e2h eylemek isterim ki; bana sorarsan\u0131z do\u011fas\u0131&#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":20852,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[153],"tags":[1052,4131,4132,4133,4134,750,4135,4130,4128,4137,4129,4136,1115],"class_list":["post-20810","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-design-pattern","tag-behavioral-patterns","tag-c-mediator","tag-c-mediator-design-pattern","tag-c-mediator-example","tag-davranissal-tasarim-kaliplarindan","tag-design-pattern","tag-god-object","tag-mediator","tag-mediator-design-pattern","tag-mediator-ile-benzer-desenler","tag-mediator-tasarim-deseni","tag-tanri-nesnesi","tag-tasarim-desenleri"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20810","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=20810"}],"version-history":[{"count":114,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20810\/revisions"}],"predecessor-version":[{"id":20935,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/20810\/revisions\/20935"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/20852"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=20810"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=20810"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=20810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}