{"id":31264,"date":"2025-10-08T01:31:24","date_gmt":"2025-10-07T22:31:24","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/"},"modified":"2025-10-08T01:31:24","modified_gmt":"2025-10-07T22:31:24","slug":"giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/","title":{"rendered":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?"},"content":{"rendered":"<style>\n    body {\n        font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n        line-height: 1.6;\n        color: #333;\n        margin: 0 auto;\n        padding: 20px;\n        max-width: 1000px;\n        background-color: #f9f9f9;\n    }\n    h1 {\n        font-size: 2.5em;\n        color: #2c3e50;\n        text-align: center;\n        margin-bottom: 40px;\n        padding-bottom: 10px;\n        border-bottom: 2px solid #3498db;\n    }\n    h2 {\n        font-size: 2em;\n        color: #34495e;\n        margin-top: 40px;\n        margin-bottom: 20px;\n        border-bottom: 1px solid #ccc;\n        padding-bottom: 5px;\n    }\n    h3 {\n        font-size: 1.5em;\n        color: #34495e;\n        margin-top: 30px;\n        margin-bottom: 15px;\n    }\n    p {\n        margin-bottom: 15px;\n        text-align: justify;\n    }\n    ul, ol {\n        margin-bottom: 15px;\n        padding-left: 25px;\n    }\n    li {\n        margin-bottom: 8px;\n    }\n    code {\n        background-color: #e0e0e0;\n        padding: 2px 4px;\n        border-radius: 3px;\n        font-family: 'Consolas', 'Monaco', monospace;\n        font-size: 0.9em;\n    }\n    pre {\n        background-color: #2d2d2d;\n        color: #f8f8f2;\n        padding: 15px;\n        border-radius: 8px;\n        overflow-x: auto;\n        margin-bottom: 20px;\n        font-family: 'Consolas', 'Monaco', monospace;\n        font-size: 0.9em;\n        line-height: 1.5;\n    }\n    pre code {\n        background-color: transparent;\n        color: inherit;\n        padding: 0;\n        border-radius: 0;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin-bottom: 20px;\n        background-color: #fff;\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 10px;\n        text-align: left;\n    }\n    th {\n        background-color: #f2f2f2;\n        font-weight: bold;\n        color: #333;\n    }\n    tr:nth-child(even) {\n        background-color: #f5f5f5;\n    }\n    .uzman-ipucu {\n        background-color: #e8f5e9;\n        border-left: 5px solid #4CAF50;\n        padding: 15px;\n        margin: 20px 0;\n        border-radius: 5px;\n        font-style: italic;\n        color: #388e3c;\n    }\n    .uyari {\n        background-color: #ffe0b2;\n        border-left: 5px solid #ff9800;\n        padding: 15px;\n        margin: 20px 0;\n        border-radius: 5px;\n        color: #e65100;\n    }\n    .sss-container {\n        background-color: #e3f2fd;\n        border-left: 5px solid #2196F3;\n        padding: 20px;\n        margin-top: 30px;\n        border-radius: 5px;\n    }\n    .sss-container h3 {\n        color: #1976D2;\n        margin-top: 0;\n    }\n    .sss-container p {\n        margin-bottom: 10px;\n    }\n    .sss-container strong {\n        color: #303f9f;\n    }<\/p>\n<p>    \/* Mobil Uyumlu Tasar\u0131m (Media Query) *\/\n    @media (max-width: 768px) {\n        body {\n            padding: 15px;\n        }\n        h1 {\n            font-size: 1.8em;\n            margin-bottom: 20px;\n        }\n        h2 {\n            font-size: 1.5em;\n            margin-top: 30px;\n        }\n        h3 {\n            font-size: 1.2em;\n            margin-top: 25px;\n        }\n        pre {\n            padding: 10px;\n            font-size: 0.85em;\n        }\n        table, thead, tbody, th, td, tr {\n            display: block;\n        }\n        thead tr {\n            position: absolute;\n            top: -9999px;\n            left: -9999px;\n        }\n        tr {\n            border: 1px solid #ccc;\n            margin-bottom: 10px;\n        }\n        td {\n            border: none;\n            border-bottom: 1px solid #eee;\n            position: relative;\n            padding-left: 50%;\n            text-align: right;\n        }\n        td:before {\n            position: absolute;\n            top: 6px;\n            left: 6px;\n            width: 45%;\n            padding-right: 10px;\n            white-space: nowrap;\n            text-align: left;\n            font-weight: bold;\n        }\n        \/* Tablo ba\u015fl\u0131klar\u0131n\u0131 mobil g\u00f6r\u00fcn\u00fcmde h\u00fccre i\u00e7eri\u011fi olarak g\u00f6ster *\/\n        td:nth-of-type(1):before { content: \"Kavram\"; }\n        td:nth-of-type(2):before { content: \"A\u00e7\u0131klama\"; }\n        td:nth-of-type(3):before { content: \"Rol\u00fc\"; }\n    }\n    @media (max-width: 480px) {\n        body {\n            padding: 10px;\n        }\n        h1 {\n            font-size: 1.5em;\n        }\n        h2 {\n            font-size: 1.3em;\n        }\n        h3 {\n            font-size: 1.1em;\n        }\n    }\n<\/style>\n<p><body><\/p>\n<h1>Padr\u00e3o Mediator: Karma\u015f\u0131k Sistemleri Nas\u0131l Sadele\u015ftiririz?<\/h1>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? <strong>Padr\u00e3o Mediator<\/strong>, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.<\/p>\n<p>Bir yaz\u0131l\u0131m projesi geli\u015ftirmeye ba\u015flad\u0131\u011f\u0131m\u0131zda, ba\u015flang\u0131\u00e7ta her \u015fey olduk\u00e7a d\u00fczenli ve anla\u015f\u0131l\u0131r g\u00f6r\u00fcnebilir. Ancak zamanla, yeni \u00f6zellikler eklendik\u00e7e ve farkl\u0131 bile\u015fenler birbirleriyle etkile\u015fime girmeye ba\u015flad\u0131k\u00e7a i\u015fler kar\u0131\u015fmaya ba\u015flar. Bir d\u00fc\u011fmenin t\u0131klanmas\u0131 ba\u015fka bir aray\u00fcz eleman\u0131n\u0131 g\u00fcncellerken, o g\u00fcncellenen eleman da farkl\u0131 bir veri par\u00e7as\u0131n\u0131 etkileyebilir. K\u0131sa s\u00fcrede, her bir bile\u015fenin di\u011fer bir\u00e7ok bile\u015fenle do\u011frudan ba\u011flant\u0131 kurdu\u011fu, &#8220;spagetti kod&#8221; olarak tabir edilen, i\u00e7inden \u00e7\u0131k\u0131lmaz bir ba\u011f\u0131ml\u0131l\u0131k a\u011f\u0131 olu\u015fur.<\/p>\n<p>Bu karma\u015f\u0131k ileti\u015fim a\u011f\u0131, beraberinde bir\u00e7ok sorunu getirir. \u00d6ncelikle, yeni bir \u00f6zellik eklemek veya mevcut bir davran\u0131\u015f\u0131 de\u011fi\u015ftirmek olduk\u00e7a zorla\u015f\u0131r; \u00e7\u00fcnk\u00fc bir bile\u015fende yap\u0131lan de\u011fi\u015fiklik, sistemin tahmin edilemeyen ba\u015fka noktalar\u0131nda yan etkilere yol a\u00e7abilir. Bu durum, hata ay\u0131klama s\u00fcre\u00e7lerini uzat\u0131r ve yaz\u0131l\u0131m\u0131n bak\u0131m maliyetini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Ayr\u0131ca, her bile\u015fenin di\u011ferlerinin i\u00e7 i\u015fleyi\u015fi hakk\u0131nda bilgi sahibi olmas\u0131 gerekti\u011finden, bile\u015fenler aras\u0131 ba\u011f\u0131ml\u0131l\u0131k (coupling) artar ve bu da kodun yeniden kullan\u0131labilirli\u011fini d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<p>Peki, bu kaosu d\u00fczenlemenin ve bile\u015fenler aras\u0131 ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 azaltman\u0131n bir yolu yok mu? Elbette var. Tasar\u0131m desenleri, yaz\u0131l\u0131m geli\u015ftiricilerin s\u0131k kar\u015f\u0131la\u015ft\u0131\u011f\u0131 bu t\u00fcr problemlere test edilmi\u015f ve kan\u0131tlanm\u0131\u015f \u00e7\u00f6z\u00fcmler sunar. Bu makalede ele alaca\u011f\u0131m\u0131z <strong>Mediator deseni<\/strong>, tam da bu noktada devreye girer. Mediator, bile\u015fenlerin birbirleriyle do\u011frudan ileti\u015fim kurmas\u0131n\u0131 engelleyerek, t\u00fcm etkile\u015fimin merkezi bir nesne \u00fczerinden ger\u00e7ekle\u015fmesini sa\u011flar. Bu sayede, her bile\u015fen sadece Mediator&#8217;\u0131 tan\u0131r ve onunla ileti\u015fim kurar, di\u011fer bile\u015fenlerin varl\u0131\u011f\u0131ndan bile haberdar olmaz. B\u00f6ylece, sistemdeki her bir par\u00e7a daha izole hale gelir, daha kolay test edilebilir ve \u00e7ok daha esnek bir yap\u0131ya kavu\u015fur.<\/p>\n<h2>Padr\u00e3o Mediator Nedir ve Temel Kavramlar\u0131 Nelerdir?<\/h2>\n<p><strong>Padr\u00e3o Mediator<\/strong>, Gang of Four (GoF) tasar\u0131m desenleri aras\u0131nda yer alan davran\u0131\u015fsal (behavioral) bir desendir. Temel amac\u0131, bir nesne k\u00fcmesinin birbiriyle do\u011frudan etkile\u015fimini kaps\u00fclleyerek, nesneler aras\u0131ndaki ba\u011flant\u0131lar\u0131 gev\u015fetmektir. Yani, bu desen, nesnelerin do\u011frudan birbirine ba\u011f\u0131ml\u0131 olmak yerine, t\u00fcm ileti\u015fimi merkezi bir &#8220;arabulucu&#8221; (mediator) nesne \u00fczerinden ger\u00e7ekle\u015ftirmesini sa\u011flar.<\/p>\n<p>Bu deseni bir hava trafik kontrol\u00f6r\u00fcne benzetebiliriz. U\u00e7aklar (bile\u015fenler) birbirleriyle do\u011frudan konu\u015fmak yerine, hava trafik kontrol\u00f6r\u00fcne (mediator) bilgi verir ve ondan talimat al\u0131rlar. Kontrol\u00f6r, t\u00fcm u\u00e7aklar\u0131n konumunu ve rotas\u0131n\u0131 bilir ve olas\u0131 \u00e7arp\u0131\u015fmalar\u0131 \u00f6nlemek i\u00e7in gerekli talimatlar\u0131 verir. Bu sayede, her pilot sadece kontrol\u00f6rle etkile\u015fim kurar ve di\u011fer u\u00e7aklar\u0131n karma\u015f\u0131k rotalar\u0131yla u\u011fra\u015fmak zorunda kalmaz. Benzer \u015fekilde, yaz\u0131l\u0131m bile\u015fenleri de <strong>Mediator<\/strong> ile etkile\u015fim kurarak di\u011fer bile\u015fenlerin i\u00e7 detaylar\u0131na ba\u011f\u0131ml\u0131 olmaktan kurtulur.<\/p>\n<p>Mediator deseninde anahtar rol oynayan iki temel kavram vard\u0131r:<\/p>\n<ol>\n<li><strong>Mediator (Arabulucu)<\/strong>: Bu, t\u00fcm ileti\u015fim mant\u0131\u011f\u0131n\u0131 i\u00e7eren merkezi nesnedir. Bile\u015fenlerden gelen mesajlar\u0131 al\u0131r, bu mesajlar\u0131 yorumlar ve ilgili bile\u015fenlere y\u00f6nlendirir. Bile\u015fenler aras\u0131ndaki koordinasyonu ve i\u015f ak\u0131\u015f\u0131n\u0131 y\u00f6netir. Genellikle bir aray\u00fcz (<code>IMediator<\/code>) ile tan\u0131mlan\u0131r ve farkl\u0131 concrete uygulamalar\u0131 olabilir.<\/li>\n<li><strong>Colleague (Meslekta\u015f\/\u0130\u015f Arkada\u015f\u0131)<\/strong>: Bunlar, Mediator ile etkile\u015fim kuran bireysel bile\u015fenlerdir. Her bir <code>Colleague<\/code>, Mediator&#8217;\u0131 bilir ve onunla ileti\u015fim kurar ancak di\u011fer <code>Colleague<\/code>&#8216;lerin varl\u0131\u011f\u0131ndan veya i\u015fleyi\u015finden haberdar de\u011fildir. Kendi i\u015f mant\u0131klar\u0131n\u0131 y\u00fcr\u00fct\u00fcrken, di\u011fer bile\u015fenlerle etkile\u015fime ihtiya\u00e7 duyduklar\u0131nda bu iste\u011fi Mediator&#8217;a iletirler.<\/li>\n<\/ol>\n<p>Bu yap\u0131n\u0131n getirdi\u011fi en b\u00fcy\u00fck fayda, ba\u011f\u0131ml\u0131l\u0131klar\u0131n azalmas\u0131d\u0131r. Bir bile\u015fende de\u011fi\u015fiklik yap\u0131ld\u0131\u011f\u0131nda, di\u011fer bile\u015fenlerin kodu \u00fczerinde minimum etki olu\u015fur; \u00e7\u00fcnk\u00fc onlar hala ayn\u0131 <code>Mediator<\/code> aray\u00fcz\u00fc ile konu\u015fmaya devam ederler. Ayr\u0131ca, sistemin i\u015f ak\u0131\u015f\u0131 ve ileti\u015fim mant\u0131\u011f\u0131 merkezi bir yerde topland\u0131\u011f\u0131 i\u00e7in, kodu anlamak ve bak\u0131m\u0131n\u0131 yapmak \u00e7ok daha kolay hale gelir. \u00d6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k sistemlerde, bu t\u00fcr bir merkezile\u015fme, geli\u015ftirme verimlili\u011fini ve yaz\u0131l\u0131m\u0131n kalitesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<div class=\"uzman-ipucu\">\n        Uzman \u0130pucu: Mediator deseni, \u00f6zellikle \u00e7ok say\u0131da bile\u015fenin birbiriyle etkile\u015fime girdi\u011fi ve bu etkile\u015fimlerin karma\u015f\u0131k i\u015f kurallar\u0131 i\u00e7erdi\u011fi durumlarda parlar. UI bile\u015fenleri, oyunlardaki karakter etkile\u015fimleri veya bir i\u015f ak\u0131\u015f\u0131 motoru gibi senaryolar i\u00e7in idealdir.\n    <\/div>\n<h3>Bir Senaryo \u00dczerinden Mediator Deseni Nas\u0131l \u00c7al\u0131\u015f\u0131r? Ger\u00e7ek D\u00fcnya \u00d6rne\u011fi<\/h3>\n<p>\u015eimdi gelin, <strong>Padr\u00e3o Mediator<\/strong>&#8216;\u0131n ger\u00e7ek bir senaryoda nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 daha somut bir \u00f6rnek \u00fczerinden inceleyelim: Bir kullan\u0131c\u0131 aray\u00fcz\u00fc formu. Diyelim ki bir \u00fcr\u00fcn sipari\u015f formu geli\u015ftirmemiz gerekiyor. Bu formda \u015fu bile\u015fenler var:<\/p>\n<ul>\n<li><strong>\u00dcr\u00fcn Se\u00e7imi (Dropdown)<\/strong>: Kullan\u0131c\u0131 buradan bir \u00fcr\u00fcn se\u00e7er.<\/li>\n<li><strong>Adet Giri\u015fi (TextBox)<\/strong>: Se\u00e7ilen \u00fcr\u00fcnden ka\u00e7 adet al\u0131naca\u011f\u0131n\u0131 belirler.<\/li>\n<li><strong>Fiyat G\u00f6sterimi (Label)<\/strong>: Se\u00e7ilen \u00fcr\u00fcn ve adete g\u00f6re toplam fiyat\u0131 g\u00f6sterir.<\/li>\n<li><strong>Stok Kontrol\u00fc (CheckBox)<\/strong>: &#8220;Stokta Var&#8221; durumunu g\u00f6sterir, adet giri\u015fini etkileyebilir.<\/li>\n<li><strong>Sipari\u015f Onayla (Button)<\/strong>: T\u00fcm bilgiler do\u011fruysa aktif olur.<\/li>\n<\/ul>\n<p>Mediator deseni olmasayd\u0131, bu bile\u015fenler aras\u0131ndaki etkile\u015fim \u015f\u00f6yle olabilirdi:<\/p>\n<ul>\n<li>\u00dcr\u00fcn Se\u00e7imi de\u011fi\u015fti\u011finde: Fiyat G\u00f6sterimi&#8217;ni g\u00fcncelle, Adet Giri\u015fi&#8217;ni s\u0131f\u0131rla, Stok Kontrol\u00fc&#8217;n\u00fc tetikle.<\/li>\n<li>Adet Giri\u015fi de\u011fi\u015fti\u011finde: Fiyat G\u00f6sterimi&#8217;ni g\u00fcncelle, Sipari\u015f Onayla butonunun aktifli\u011fini Stok Kontrol\u00fc ve Adet miktar\u0131na g\u00f6re ayarla.<\/li>\n<li>Stok Kontrol\u00fc de\u011fi\u015fti\u011finde: Adet Giri\u015fi&#8217;nin maksimum de\u011ferini ayarla, Sipari\u015f Onayla butonunun aktifli\u011fini etkile.<\/li>\n<li>Fiyat G\u00f6sterimi de\u011fi\u015fti\u011finde: (Kendisi pasif, di\u011ferleri taraf\u0131ndan g\u00fcncellenir).<\/li>\n<li>Sipari\u015f Onayla t\u0131kland\u0131\u011f\u0131nda: T\u00fcm alanlar\u0131n ge\u00e7erlili\u011fini kontrol et.<\/li>\n<\/ul>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, her bir bile\u015fen di\u011fer birka\u00e7 bile\u015feni do\u011frudan tan\u0131mak ve onlar\u0131n metodlar\u0131n\u0131 \u00e7a\u011f\u0131rmak zorunda kal\u0131yor. Bu da yukar\u0131da bahsetti\u011fimiz &#8220;spagetti kod&#8221; durumuna yol a\u00e7\u0131yor. Yeni bir bile\u015fen eklemek veya mevcut bir bile\u015fenin davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmek, domino etkisi yaratma riski ta\u015f\u0131yor.<\/p>\n<table class=\"uyari\">\n<thead>\n<tr>\n<th>Problem<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Y\u00fcksek Ba\u011f\u0131ml\u0131l\u0131k<\/strong><\/td>\n<td>Her UI bile\u015feni, di\u011ferlerini do\u011frudan tan\u0131r ve \u00e7a\u011f\u0131r\u0131r.<\/td>\n<\/tr>\n<tr>\n<td><strong>Bak\u0131m Zorlu\u011fu<\/strong><\/td>\n<td>Bir bile\u015fendeki de\u011fi\u015fiklik, di\u011ferlerinin de kodunu etkileyebilir.<\/td>\n<\/tr>\n<tr>\n<td><strong>D\u00fc\u015f\u00fck Yeniden Kullan\u0131labilirlik<\/strong><\/td>\n<td>Bile\u015fenler birbirine s\u0131k\u0131ca ba\u011fl\u0131 oldu\u011fu i\u00e7in ba\u015fka bir formda kullanmak zordur.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u015eimdi ise Mediator deseni ile bu senaryoyu nas\u0131l ele alaca\u011f\u0131m\u0131za bakal\u0131m:<\/p>\n<p>T\u00fcm bu bile\u015fenler (<code>Colleague<\/code>&#8216;ler) kendi ba\u015flar\u0131na ba\u011f\u0131ms\u0131zd\u0131r ve yaln\u0131zca bir <code>FormMediator<\/code>&#8216;\u0131 tan\u0131rlar. Bir bile\u015fen bir olay tetikledi\u011finde (\u00f6rne\u011fin, &#8220;\u00dcr\u00fcn Se\u00e7imi de\u011fi\u015fti&#8221;), bu olay\u0131 do\u011frudan <code>FormMediator<\/code>&#8216;a bildirir. <code>FormMediator<\/code> ise, t\u00fcm bile\u015fenlerin mevcut durumunu ve birbirleriyle olan ili\u015fkilerini bilen merkezi nesnedir. Olay\u0131 ald\u0131ktan sonra, ilgili i\u015f kurallar\u0131na g\u00f6re hangi di\u011fer bile\u015fenlerin g\u00fcncellenmesi gerekti\u011fine karar verir ve bu bile\u015fenlerin ilgili metotlar\u0131n\u0131 \u00e7a\u011f\u0131r\u0131r.<\/p>\n<p>\u00d6rne\u011fin:<\/p>\n<ul>\n<li><strong>\u00dcr\u00fcn Se\u00e7imi<\/strong> de\u011fi\u015fti\u011finde, <code>FormMediator.UrunSecildi(urunKodu)<\/code> metodunu \u00e7a\u011f\u0131r\u0131r.<\/li>\n<li><code>FormMediator<\/code> bu \u00e7a\u011fr\u0131y\u0131 ald\u0131\u011f\u0131nda:\n<ol>\n<li><code>FiyatGosterimi<\/code> bile\u015feninin <code>FiyatiGuncelle(yeniFiyat)<\/code> metodunu \u00e7a\u011f\u0131r\u0131r.<\/li>\n<li><code>AdetGiris<\/code> bile\u015feninin <code>AdetiSifirla()<\/code> metodunu \u00e7a\u011f\u0131r\u0131r.<\/li>\n<li><code>StokKontrolu<\/code> bile\u015fenine yeni \u00fcr\u00fcn\u00fcn stok durumunu iletir (<code>StokDurumunuAyarla(varMi)<\/code>).<\/li>\n<\/ol>\n<\/li>\n<li><strong>Adet Giri\u015fi<\/strong> de\u011fi\u015fti\u011finde, <code>FormMediator.AdetDegisti(adet)<\/code> metodunu \u00e7a\u011f\u0131r\u0131r.<\/li>\n<li><code>FormMediator<\/code> bu \u00e7a\u011fr\u0131y\u0131 ald\u0131\u011f\u0131nda:\n<ol>\n<li><code>FiyatGosterimi<\/code> bile\u015feninin <code>FiyatiGuncelle(yeniFiyat)<\/code> metodunu \u00e7a\u011f\u0131r\u0131r (adet ve \u00fcr\u00fcn fiyat\u0131na g\u00f6re).<\/li>\n<li><code>SiparisOnayla<\/code> butonunun <code>AktifligiAyarla(gecerliMi)<\/code> metodunu \u00e7a\u011f\u0131r\u0131r (adet ve stok durumuna g\u00f6re).<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>Bu yakla\u015f\u0131m sayesinde, her UI bile\u015feni sadece kendi i\u015fini yapar ve olaylar\u0131 Mediator&#8217;a bildirir. Di\u011fer bile\u015fenlerin varl\u0131\u011f\u0131ndan bile haberi olmaz. B\u00f6ylece, sistemdeki bile\u015fenler gev\u015fek ba\u011fl\u0131 (loosely coupled) hale gelir, bu da bak\u0131m\u0131 ve yeniden kullan\u0131labilirli\u011fi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde iyile\u015ftirir.<\/p>\n<h2>Mediator Deseni Ad\u0131m Ad\u0131m Nas\u0131l Uygulan\u0131r? Kod \u00d6rnekleriyle<\/h2>\n<p>\u015eimdi Padr\u00e3o Mediator&#8217;\u0131 C# dilinde ad\u0131m ad\u0131m nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 inceleyelim. \u00d6nceki senaryomuzdaki form uygulamas\u0131n\u0131 temel alaca\u011f\u0131z.<\/p>\n<h3>Ad\u0131m 1: Mediator Aray\u00fcz\u00fcn\u00fc Tan\u0131mlama (IMediator)<\/h3>\n<p>\u00d6ncelikle, t\u00fcm bile\u015fenlerin ileti\u015fim kuraca\u011f\u0131 aray\u00fcz\u00fc tan\u0131mlayal\u0131m. Bu aray\u00fcz, Mediator&#8217;\u0131n ger\u00e7ekle\u015ftirmesi gereken t\u00fcm ileti\u015fim metotlar\u0131n\u0131 i\u00e7erecektir.<\/p>\n<pre><code class=\"language-csharp\">\npublic interface IFormMediator\n{\n    void UrunSecimiDegisti(Urun selectedProduct);\n    void AdetDegisti(int quantity);\n    void StokDurumuGuncellendi(bool isInStock);\n    void SiparisOnayla();\n    void RegisterComponent(IFormComponent component);\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Burada <code>RegisterComponent<\/code> metodu, Mediator'\u0131n form \u00fczerindeki t\u00fcm bile\u015fenleri tan\u0131mas\u0131n\u0131 ve onlara referans tutmas\u0131n\u0131 sa\u011flar. Di\u011fer metotlar ise bile\u015fenlerden gelen olaylar\u0131 temsil eder.<\/p>\n<h3>Ad\u0131m 2: Colleague Aray\u00fcz\u00fcn\u00fc ve Temel Colleague S\u0131n\u0131f\u0131n\u0131 Olu\u015fturma (IFormComponent ve ComponentBase)<\/h3>\n<p>Her bir form bile\u015feninin (<code>Colleague<\/code>) Mediator'\u0131 tan\u0131mas\u0131n\u0131 ve onunla etkile\u015fim kurmas\u0131n\u0131 sa\u011flayacak bir temel s\u0131n\u0131f olu\u015fturmak iyi bir uygulamad\u0131r. Bu sayede her bile\u015fenin <code>SetMediator<\/code> gibi ortak bir metodu olur.<\/p>\n<pre><code class=\"language-csharp\">\npublic interface IFormComponent\n{\n    void SetMediator(IFormMediator mediator);\n    string GetName(); \/\/ Sadece debugging i\u00e7in eklenebilir\n}\n\npublic abstract class ComponentBase : IFormComponent\n{\n    protected IFormMediator _mediator;\n    protected string _name;\n\n    public ComponentBase(string name)\n    {\n        _name = name;\n    }\n\n    public void SetMediator(IFormMediator mediator)\n    {\n        _mediator = mediator;\n    }\n\n    public string GetName()\n    {\n        return _name;\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 3: Concrete Colleague S\u0131n\u0131flar\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>\u015eimdi formumuzdaki her bir bile\u015fen i\u00e7in Concrete Colleague s\u0131n\u0131flar\u0131n\u0131 tan\u0131mlayal\u0131m. Bu s\u0131n\u0131flar, kendi olaylar\u0131n\u0131 Mediator'a bildirecek ve Mediator'dan gelen komutlara yan\u0131t vereceklerdir.<\/p>\n<pre><code class=\"language-csharp\">\n\/\/ Basit bir \u00dcr\u00fcn s\u0131n\u0131f\u0131\npublic class Urun\n{\n    public string Ad { get; set; }\n    public decimal BirimFiyat { get; set; }\n    public bool StoktaVar { get; set; }\n}\n\n\/\/ \u00dcr\u00fcn Se\u00e7imi Dropdown Bile\u015feni\npublic class UrunSecimiComponent : ComponentBase\n{\n    public UrunSecimiComponent() : base(\"UrunSecimi\") { }\n\n    private Urun _selectedProduct;\n    public Urun SelectedProduct\n    {\n        get { return _selectedProduct; }\n        set\n        {\n            if (_selectedProduct != value)\n            {\n                _selectedProduct = value;\n                Console.WriteLine($\"[{_name}] \u00dcr\u00fcn '{_selectedProduct?.Ad}' olarak se\u00e7ildi.\");\n                _mediator?.UrunSecimiDegisti(_selectedProduct);\n            }\n        }\n    }\n}\n\n\/\/ Adet Giri\u015fi TextBox Bile\u015feni\npublic class AdetGirisComponent : ComponentBase\n{\n    public AdetGirisComponent() : base(\"AdetGiris\") { }\n\n    private int _quantity;\n    public int Quantity\n    {\n        get { return _quantity; }\n        set\n        {\n            if (_quantity != value)\n            {\n                _quantity = value;\n                Console.WriteLine($\"[{_name}] Adet: {_quantity}\");\n                _mediator?.AdetDegisti(_quantity);\n            }\n        }\n    }\n\n    public void SetQuantity(int q)\n    {\n        Console.WriteLine($\"[{_name}] Adet harici olarak ayarland\u0131: {q}\");\n        _quantity = q;\n    }\n}\n\n\/\/ Fiyat G\u00f6sterimi Label Bile\u015feni\npublic class FiyatGosterimComponent : ComponentBase\n{\n    public FiyatGosterimComponent() : base(\"FiyatGosterim\") { }\n\n    private decimal _totalPrice;\n    public decimal TotalPrice\n    {\n        get { return _totalPrice; }\n        private set\n        {\n            _totalPrice = value;\n            Console.WriteLine($\"[{_name}] Toplam Fiyat: {_totalPrice:C}\");\n        }\n    }\n\n    public void UpdatePrice(decimal price)\n    {\n        TotalPrice = price;\n    }\n}\n\n\/\/ Stok Kontrol\u00fc CheckBox Bile\u015feni\npublic class StokKontrolComponent : ComponentBase\n{\n    public StokKontrolComponent() : base(\"StokKontrol\") { }\n\n    private bool _isInStock;\n    public bool IsInStock\n    {\n        get { return _isInStock; }\n        private set\n        {\n            _isInStock = value;\n            Console.WriteLine($\"[{_name}] Stok Durumu: {(_isInStock ? \"VAR\" : \"YOK\")}\");\n            _mediator?.StokDurumuGuncellendi(_isInStock);\n        }\n    }\n\n    public void SetStockStatus(bool status)\n    {\n        IsInStock = status;\n    }\n}\n\n\/\/ Sipari\u015f Onayla Butonu Bile\u015feni\npublic class SiparisOnaylaComponent : ComponentBase\n{\n    public SiparisOnaylaComponent() : base(\"SiparisOnayla\") { }\n\n    private bool _isEnabled;\n    public bool IsEnabled\n    {\n        get { return _isEnabled; }\n        private set\n        {\n            _isEnabled = value;\n            Console.WriteLine($\"[{_name}] Buton Durumu: {(_isEnabled ? \"AKT\u0130F\" : \"PAS\u0130F\")}\");\n        }\n    }\n\n    public void SetEnabled(bool enable)\n    {\n        IsEnabled = enable;\n    }\n\n    public void Click()\n    {\n        if (IsEnabled)\n        {\n            Console.WriteLine($\"[{_name}] Sipari\u015f Onayland\u0131!\");\n            _mediator?.SiparisOnayla();\n        }\n        else\n        {\n            Console.WriteLine($\"[{_name}] Buton pasif, sipari\u015f onaylanamad\u0131.\");\n        }\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 4: Concrete Mediator S\u0131n\u0131f\u0131n\u0131 Olu\u015fturma<\/h3>\n<p>Son olarak, t\u00fcm bu bile\u015fenlerin ileti\u015fimini y\u00f6netecek olan <code>FormMediator<\/code> s\u0131n\u0131f\u0131n\u0131 implement edelim. Bu s\u0131n\u0131f, t\u00fcm <code>Colleague<\/code>'lere referans tutar ve gelen olaylara g\u00f6re hangi <code>Colleague<\/code>'lerin hangi metotlar\u0131n\u0131 \u00e7a\u011f\u0131raca\u011f\u0131na karar verir.<\/p>\n<pre><code class=\"language-csharp\">\npublic class ConcreteFormMediator : IFormMediator\n{\n    private UrunSecimiComponent _urunSecimi;\n    private AdetGirisComponent _adetGiris;\n    private FiyatGosterimComponent _fiyatGosterim;\n    private StokKontrolComponent _stokKontrol;\n    private SiparisOnaylaComponent _siparisOnayla;\n\n    \/\/ \u00d6rnek \u00fcr\u00fcnler\n    private readonly List<Urun> _urunler = new List<Urun>\n    {\n        new Urun { Ad = \"Laptop\", BirimFiyat = 10000, StoktaVar = true },\n        new Urun { Ad = \"Mouse\", BirimFiyat = 250, StoktaVar = true },\n        new Urun { Ad = \"Klavye\", BirimFiyat = 700, StoktaVar = false }\n    };\n\n    public void RegisterComponent(IFormComponent component)\n    {\n        if (component is UrunSecimiComponent urunSecimi) _urunSecimi = urunSecimi;\n        else if (component is AdetGirisComponent adetGiris) _adetGiris = adetGiris;\n        else if (component is FiyatGosterimComponent fiyatGosterim) _fiyatGosterim = fiyatGosterim;\n        else if (component is StokKontrolComponent stokKontrol) _stokKontrol = stokKontrol;\n        else if (component is SiparisOnaylaComponent siparisOnayla) _siparisOnayla = siparisOnayla;\n        \n        component.SetMediator(this); \/\/ Mediator'\u0131 bile\u015fene ata\n    }\n\n    \/\/region Olay \u0130\u015fleyiciler\n    public void UrunSecimiDegisti(Urun selectedProduct)\n    {\n        Console.WriteLine(\"[Mediator] \u00dcr\u00fcn se\u00e7imi de\u011fi\u015fti.\");\n        if (selectedProduct == null)\n        {\n            _fiyatGosterim.UpdatePrice(0);\n            _adetGiris.SetQuantity(0);\n            _stokKontrol.SetStockStatus(false);\n            _siparisOnayla.SetEnabled(false);\n            return;\n        }\n\n        \/\/ Fiyat\u0131 g\u00fcncelle\n        _fiyatGosterim.UpdatePrice(selectedProduct.BirimFiyat * _adetGiris.Quantity);\n        \n        \/\/ Adeti s\u0131f\u0131rla (genellikle yeni \u00fcr\u00fcn se\u00e7ildi\u011finde adet s\u0131f\u0131rlan\u0131r)\n        _adetGiris.SetQuantity(1); \/\/ Varsay\u0131lan 1 adet olarak ayarla\n        \n        \/\/ Stok durumunu g\u00fcncelle\n        _stokKontrol.SetStockStatus(selectedProduct.StoktaVar);\n\n        \/\/ Sipari\u015f onayla butonunu g\u00fcncelle\n        UpdateSiparisOnaylaButtonStatus();\n    }\n\n    public void AdetDegisti(int quantity)\n    {\n        Console.WriteLine(\"[Mediator] Adet de\u011fi\u015fti.\");\n        if (_urunSecimi.SelectedProduct == null)\n        {\n            _fiyatGosterim.UpdatePrice(0);\n            _siparisOnayla.SetEnabled(false);\n            return;\n        }\n\n        \/\/ Fiyat\u0131 g\u00fcncelle\n        _fiyatGosterim.UpdatePrice(_urunSecimi.SelectedProduct.BirimFiyat * quantity);\n        \n        \/\/ Sipari\u015f onayla butonunu g\u00fcncelle\n        UpdateSiparisOnaylaButtonStatus();\n    }\n\n    public void StokDurumuGuncellendi(bool isInStock)\n    {\n        Console.WriteLine(\"[Mediator] Stok durumu g\u00fcncellendi.\");\n        \/\/ E\u011fer stokta yoksa, adet 0 yap\u0131l\u0131r ve buton pasif hale gelir.\n        if (!isInStock)\n        {\n            _adetGiris.SetQuantity(0);\n        }\n        UpdateSiparisOnaylaButtonStatus();\n    }\n\n    public void SiparisOnayla()\n    {\n        Console.WriteLine(\"[Mediator] Sipari\u015f onaylama iste\u011fi al\u0131nd\u0131.\");\n        \/\/ Burada ger\u00e7ek sipari\u015f i\u015fleme mant\u0131\u011f\u0131 olabilir.\n        \/\/ \u00d6rne\u011fin, bir servis \u00e7a\u011fr\u0131s\u0131 yapmak.\n        Console.WriteLine(\"Sipari\u015f i\u015fleme al\u0131nd\u0131: \" +\n                          $\"{_urunSecimi.SelectedProduct.Ad} - {_adetGiris.Quantity} adet \" +\n                          $\"Toplam: {_fiyatGosterim.TotalPrice:C}\");\n    }\n    \/\/endregion\n\n    \/\/ Yard\u0131mc\u0131 metot: Sipari\u015f Onayla butonunun durumunu belirle\n    private void UpdateSiparisOnaylaButtonStatus()\n    {\n        bool enableButton = _urunSecimi.SelectedProduct != null &&\n                            _adetGiris.Quantity > 0 &&\n                            _stokKontrol.IsInStock;\n        _siparisOnayla.SetEnabled(enableButton);\n    }\n\n    \/\/ D\u0131\u015far\u0131dan \u00fcr\u00fcn listesini d\u00f6nd\u00fcrme (\u00f6rne\u011fin UI'\u0131n dropdown'\u0131 doldurmas\u0131 i\u00e7in)\n    public List<Urun> GetAvailableProducts()\n    {\n        return _urunler;\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<h3>Ad\u0131m 5: Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u015eimdi t\u00fcm bu par\u00e7alar\u0131 bir araya getirelim ve nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6relim.<\/p>\n<pre><code class=\"language-csharp\">\npublic class Program\n{\n    public static void Main(string[] args)\n    {\n        Console.WriteLine(\"Mediator Deseni Demoo Ba\u015flat\u0131l\u0131yor...\\n\");\n\n        \/\/ 1. Mediator ve Colleague'leri olu\u015ftur\n        IFormMediator mediator = new ConcreteFormMediator();\n\n        UrunSecimiComponent urunSecimi = new UrunSecimiComponent();\n        AdetGirisComponent adetGiris = new AdetGirisComponent();\n        FiyatGosterimComponent fiyatGosterim = new FiyatGosterimComponent();\n        StokKontrolComponent stokKontrol = new StokKontrolComponent();\n        SiparisOnaylaComponent siparisOnayla = new SiparisOnaylaComponent();\n\n        \/\/ 2. Colleague'leri Mediator'a kaydet (ve Mediator'\u0131 Colleague'lere ata)\n        ((ConcreteFormMediator)mediator).RegisterComponent(urunSecimi);\n        ((ConcreteFormMediator)mediator).RegisterComponent(adetGiris);\n        ((ConcreteFormMediator)mediator).RegisterComponent(fiyatGosterim);\n        ((ConcreteFormMediator)mediator).RegisterComponent(stokKontrol);\n        ((ConcreteFormMediator)mediator).RegisterComponent(siparisOnayla);\n\n        Console.WriteLine(\"--- Senaryo 1: Laptop Se\u00e7imi ve Adet De\u011fi\u015fikli\u011fi ---\");\n        Urun laptop = ((ConcreteFormMediator)mediator).GetAvailableProducts().First(p => p.Ad == \"Laptop\");\n        urunSecimi.SelectedProduct = laptop; \/\/ Kullan\u0131c\u0131 Laptop se\u00e7ti\n        \/\/ Mediator otomatik olarak adet giri\u015fini 1'e ayarlayacak ve fiyat\u0131 g\u00fcncelleyecek.\n        \/\/ Ayr\u0131ca stok durumunu da ayarlayacak ve butonu aktif edecek.\n\n        adetGiris.Quantity = 2; \/\/ Kullan\u0131c\u0131 adeti 2 olarak de\u011fi\u015ftirdi\n        \/\/ Mediator, fiyat\u0131 ve butonun aktifli\u011fini tekrar ayarlayacak.\n\n        siparisOnayla.Click(); \/\/ Kullan\u0131c\u0131 sipari\u015fi onaylad\u0131\n\n        Console.WriteLine(\"\\n--- Senaryo 2: Klavye Se\u00e7imi (Stokta Yok) ---\");\n        Urun klavye = ((ConcreteFormMediator)mediator).GetAvailableProducts().First(p => p.Ad == \"Klavye\");\n        urunSecimi.SelectedProduct = klavye; \/\/ Kullan\u0131c\u0131 Klavye se\u00e7ti\n        \/\/ Mediator, adet giri\u015fini s\u0131f\u0131rlayacak, stok durumunu YOK olarak ayarlayacak ve butonu pasif yapacak.\n\n        adetGiris.Quantity = 5; \/\/ Kullan\u0131c\u0131 stokta olmayan \u00fcr\u00fcnden adet girmeye \u00e7al\u0131\u015ft\u0131\n        \/\/ Mediator, adet 5 olsa da stokta olmad\u0131\u011f\u0131 i\u00e7in butonu aktif etmeyecek.\n\n        siparisOnayla.Click(); \/\/ Buton pasif oldu\u011fu i\u00e7in sipari\u015f onaylanmayacak.\n\n        Console.WriteLine(\"\\nDemo Sonland\u0131.\");\n        Console.ReadKey();\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki kod \u00f6rneklerinde, her bir bile\u015fen kendi durumunu y\u00f6netiyor ve de\u011fi\u015fiklikleri Mediator'a bildiriyor. Mediator ise bu de\u011fi\u015fikliklere g\u00f6re di\u011fer bile\u015fenlerin durumunu g\u00fcncelliyor. B\u00f6ylece, bile\u015fenler birbirlerinin i\u00e7 i\u015fleyi\u015finden haberdar olmak zorunda kalm\u0131yor, bu da kodu \u00e7ok daha mod\u00fcler ve anla\u015f\u0131l\u0131r hale getiriyor.<\/p>\n<h2>Mediator'\u0131 Kullan\u0131rken Dikkat Edilmesi Gereken \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar Nelerdir?<\/h2>\n<p><strong>Padr\u00e3o Mediator<\/strong>, do\u011fru kullan\u0131ld\u0131\u011f\u0131nda sistem karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilirken, yanl\u0131\u015f kullan\u0131ld\u0131\u011f\u0131nda yeni sorunlara yol a\u00e7abilir. \u0130\u015fte Mediator'\u0131 uygularken g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 ipu\u00e7lar\u0131 ve en iyi uygulamalar:<\/p>\n<ul>\n<li><strong>Ne Zaman Kullanmal\u0131s\u0131n\u0131z?<\/strong>\n<ul>\n<li>\u00c7ok say\u0131da nesne karma\u015f\u0131k yollarla birbirine ba\u011fl\u0131 oldu\u011funda ve bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 azaltmak istedi\u011finizde.<\/li>\n<li>Nesneler aras\u0131 ileti\u015fim mant\u0131\u011f\u0131n\u0131 merkezi bir yerde toplamak ve yeniden kullan\u0131labilirli\u011fi art\u0131rmak istedi\u011finizde.<\/li>\n<li>Nesneler aras\u0131ndaki etkile\u015fimde de\u011fi\u015fiklik yapman\u0131n, di\u011fer nesneler \u00fczerinde b\u00fcy\u00fck bir etki yaratmas\u0131n\u0131 istemedi\u011finizde. \u00d6zellikle kullan\u0131c\u0131 aray\u00fcz\u00fc (UI) kontrolleri aras\u0131ndaki etkile\u015fimlerde veya i\u015f ak\u0131\u015f\u0131 y\u00f6netimi gibi s\u00fcre\u00e7lerde \u00e7ok faydal\u0131d\u0131r.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Potansiyel Dezavantajlara Dikkat! \"God Object\" Riski:<\/strong> Mediator deseninin en b\u00fcy\u00fck dezavantaj\u0131, Mediator nesnesinin zamanla \"Tanr\u0131 Nesne\" (God Object) haline gelme riskidir. Yani, \u00e7ok fazla sorumluluk \u00fcstlenip \u00e7ok fazla i\u015f mant\u0131\u011f\u0131 i\u00e7ermesi durumunda, kendisi bir darbo\u011faz ve bak\u0131m kabusu haline gelebilir. Bu durum, deseni kullanman\u0131n temel faydas\u0131n\u0131 (karma\u015f\u0131kl\u0131\u011f\u0131 azaltma) ortadan kald\u0131r\u0131r. Bu nedenle, Mediator'\u0131n sadece ileti\u015fimi koordine etmeye odaklanmas\u0131na ve i\u015f mant\u0131\u011f\u0131n\u0131 m\u00fcmk\u00fcn oldu\u011funca <code>Colleague<\/code>'lerde b\u0131rakmaya \u00e7al\u0131\u015f\u0131n.<\/li>\n<li><strong>Soyutlama Seviyesi:<\/strong> <code>IMediator<\/code> ve <code>IColleague<\/code> (veya <code>ComponentBase<\/code>) gibi aray\u00fczler ve soyut s\u0131n\u0131flar kullanmak, esnekli\u011fi art\u0131r\u0131r. Bu sayede, farkl\u0131 <code>ConcreteMediator<\/code> uygulamalar\u0131 veya farkl\u0131 <code>ConcreteColleague<\/code> tipleri kolayca sisteme dahil edilebilir.<\/li>\n<li><strong>\u0130leti\u015fim Y\u00f6ntemi:<\/strong> Mediator ile <code>Colleague<\/code>'ler aras\u0131ndaki ileti\u015fim tek y\u00f6nl\u00fc (<code>Colleague<\/code>'den <code>Mediator<\/code>'a) veya \u00e7ift y\u00f6nl\u00fc olabilir. Genellikle, <code>Colleague<\/code>'ler olaylar\u0131 <code>Mediator<\/code>'a bildirir ve <code>Mediator<\/code> da gerekli <code>Colleague<\/code>'lerin metotlar\u0131n\u0131 \u00e7a\u011f\u0131rarak onlar\u0131 g\u00fcnceller. Bu tek y\u00f6nl\u00fc (olay tabanl\u0131) yakla\u015f\u0131m genellikle daha temizdir.<\/li>\n<li><strong>Kay\u0131t (Registration) Mekanizmas\u0131:<\/strong> Mediator'\u0131n t\u00fcm <code>Colleague<\/code>'leri tan\u0131mas\u0131 gerekir. Bu, bir yap\u0131land\u0131r\u0131c\u0131 (constructor) arac\u0131l\u0131\u011f\u0131yla veya bizim \u00f6rne\u011fimizdeki gibi bir <code>RegisterComponent<\/code> metodu ile yap\u0131labilir. B\u00fcy\u00fck ve dinamik sistemlerde, bu kay\u0131t i\u015flemini otomatikle\u015ftirmek i\u00e7in bir Dependency Injection (DI) \u00e7at\u0131s\u0131 kullanmak faydal\u0131 olabilir.<\/li>\n<li><strong>Test Edilebilirlik:<\/strong> Mediator deseni, bile\u015fenleri birbirinden ay\u0131rd\u0131\u011f\u0131 i\u00e7in birim testlerini (unit test) kolayla\u015ft\u0131r\u0131r. Her bir <code>Colleague<\/code>, Mediator'\u0131 mock'layarak kendi ba\u015f\u0131na test edilebilir. Ayn\u0131 \u015fekilde, <code>Mediator<\/code> da <code>Colleague<\/code>'leri mock'layarak kendi ileti\u015fim mant\u0131\u011f\u0131n\u0131 test edebilir.<\/li>\n<li><strong>Alternatiflerle K\u0131yaslama:<\/strong> Her zaman bir tasar\u0131m deseni kullanmak zorunda de\u011filsiniz. Basit ileti\u015fim senaryolar\u0131nda, do\u011frudan ileti\u015fim veya Observer deseni daha uygun olabilir. Mediator, \u00f6zellikle ileti\u015fim a\u011f\u0131n\u0131n karma\u015f\u0131kla\u015ft\u0131\u011f\u0131 durumlarda de\u011ferlidir.<\/li>\n<\/ul>\n<div class=\"uzman-ipucu\">\n        Geli\u015fmi\u015f \u0130pucu: \u00c7ok b\u00fcy\u00fck ve karma\u015f\u0131k Mediator'lar\u0131 b\u00f6lmek i\u00e7in \"Hierarchical Mediators\" (Hiyerar\u015fik Arabulucular) kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Her alt-Mediator, belirli bir alt sistemin ileti\u015fimini y\u00f6netirken, \u00fcst-Mediator daha genel koordinasyonu sa\u011flar.\n    <\/div>\n<h2>Padr\u00e3o Mediator'\u0131n Avantajlar\u0131 ve Dezavantajlar\u0131 Nelerdir?<\/h2>\n<p>Her tasar\u0131m deseninde oldu\u011fu gibi, <strong>Padr\u00e3o Mediator<\/strong>'\u0131n da hem g\u00fc\u00e7l\u00fc y\u00f6nleri hem de baz\u0131 zay\u0131fl\u0131klar\u0131 bulunmaktad\u0131r. Bu dengeyi anlamak, deseni ne zaman ve nas\u0131l kullanaca\u011f\u0131n\u0131za karar verirken kritik \u00f6neme sahiptir.<\/p>\n<h3>Avantajlar\u0131:<\/h3>\n<ul>\n<li><strong>Gev\u015fek Ba\u011fl\u0131l\u0131k (Loose Coupling):<\/strong> En b\u00fcy\u00fck faydas\u0131 budur. Bile\u015fenler birbirleri yerine yaln\u0131zca Mediator ile etkile\u015fime girer. Bu, bile\u015fenlerin birbirlerinin i\u00e7 i\u015fleyi\u015fleri hakk\u0131nda bilgi sahibi olmas\u0131n\u0131 engeller ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r. Sonu\u00e7 olarak, bir bile\u015fende yap\u0131lan de\u011fi\u015fiklik di\u011ferlerini do\u011frudan etkilemez.<\/li>\n<li><strong>Merkezi Kontrol ve \u0130\u015f Ak\u0131\u015f\u0131 Y\u00f6netimi:<\/strong> T\u00fcm ileti\u015fim mant\u0131\u011f\u0131 ve i\u015f ak\u0131\u015f\u0131, merkezi bir <code>Mediator<\/code> nesnesinde toplan\u0131r. Bu, sistemin davran\u0131\u015f\u0131n\u0131 tek bir yerden anlamay\u0131, de\u011fi\u015ftirmeyi ve y\u00f6netmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<li><strong>Yeniden Kullan\u0131labilirlik (Reusability):<\/strong> Bile\u015fenler di\u011fer bile\u015fenlerden ba\u011f\u0131ms\u0131z hale geldi\u011fi i\u00e7in, onlar\u0131 farkl\u0131 ba\u011flamlarda veya farkl\u0131 uygulamalarda yeniden kullanmak \u00e7ok daha kolayd\u0131r.<\/li>\n<li><strong>Test Edilebilirlik (Testability):<\/strong> Gev\u015fek ba\u011fl\u0131l\u0131k sayesinde, bireysel bile\u015fenleri veya Mediator'\u0131 di\u011ferlerinden izole ederek birim testleri yazmak daha kolayd\u0131r.<\/li>\n<li><strong>Sistem Karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 Azaltma:<\/strong> Nesneler aras\u0131 direkt ileti\u015fim a\u011f\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131n\u0131, merkezi bir Mediator'a y\u00f6nlendirerek genel sistem karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azalt\u0131r. Her bile\u015fenin di\u011fer <code>N-1<\/code> bile\u015fenle ileti\u015fim kurmas\u0131 yerine, sadece <code>1<\/code> Mediator ile ileti\u015fim kurmas\u0131 yeterlidir.<\/li>\n<li><strong>Esneklik ve Geni\u015fletilebilirlik:<\/strong> Yeni bir bile\u015fen eklemek veya mevcut bir bile\u015fenin ileti\u015fim kural\u0131n\u0131 de\u011fi\u015ftirmek, genellikle sadece Mediator \u00fczerinde k\u00fc\u00e7\u00fck de\u011fi\u015fiklikler yapmay\u0131 gerektirir, bu da sistemi daha esnek hale getirir.<\/li>\n<\/ul>\n<h3>Dezavantajlar\u0131:<\/h3>\n<ul>\n<li><strong>\"God Object\" Riski:<\/strong> Daha \u00f6nce de belirtildi\u011fi gibi, Mediator'\u0131n t\u00fcm i\u015f mant\u0131\u011f\u0131n\u0131 ve etkile\u015fimleri kendi i\u00e7inde toplamas\u0131, onu devasa ve y\u00f6netilmesi zor bir \"Tanr\u0131 Nesnesi\" haline getirebilir. Bu, deseni kullanman\u0131n amac\u0131na ayk\u0131r\u0131d\u0131r ve yeni bir karma\u015f\u0131kl\u0131k kayna\u011f\u0131 yarat\u0131r.<\/li>\n<li><strong>Tek Hata Noktas\u0131 (Single Point of Failure):<\/strong> T\u00fcm ileti\u015fim Mediator \u00fczerinden ge\u00e7ti\u011fi i\u00e7in, e\u011fer Mediator'da bir hata olursa, bu t\u00fcm sistemi etkileyebilir. Ayr\u0131ca, Mediator'\u0131n performans\u0131, sistemin genel performans\u0131n\u0131 etkileyen bir darbo\u011faz haline gelebilir.<\/li>\n<li><strong>Ba\u015flang\u0131\u00e7 Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> \u00c7ok basit senaryolarda, do\u011frudan ileti\u015fim kurmak daha kolay ve h\u0131zl\u0131 olabilir. Mediator desenini uygulamak, ek aray\u00fczler ve s\u0131n\u0131flar gerektirdi\u011finden, ba\u015flang\u0131\u00e7ta ekstra soyutlama ve kod karma\u015f\u0131kl\u0131\u011f\u0131 getirebilir.<\/li>\n<li><strong>S\u0131cakl\u0131k Artt\u0131k\u00e7a Bak\u0131m Zorlu\u011fu (Over-complex Mediator):<\/strong> E\u011fer Mediator \u00e7ok fazla sorumluluk \u00fcstlenirse ve \u00e7ok say\u0131da <code>Colleague<\/code> ile karma\u015f\u0131k etkile\u015fimleri y\u00f6netmek zorunda kal\u0131rsa, kendi i\u00e7inde anla\u015f\u0131lmas\u0131 ve bak\u0131m\u0131 zor bir hale gelebilir.<\/li>\n<\/ul>\n<p>Sonu\u00e7 olarak, <strong>Padr\u00e3o Mediator<\/strong> g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r ancak her zaman en iyi \u00e7\u00f6z\u00fcm de\u011fildir. \u00d6zellikle b\u00fcy\u00fck, karma\u015f\u0131k ve \u00e7ok say\u0131da bile\u015fenin birbirini etkilemesi gereken sistemlerdeki ba\u011f\u0131ml\u0131l\u0131klar\u0131 azaltmak ve merkezi kontrol sa\u011flamak i\u00e7in son derece faydal\u0131d\u0131r. Ancak, onu dikkatli bir \u015fekilde tasarlamak ve \"God Object\" tuza\u011f\u0131na d\u00fc\u015fmemek kritik \u00f6neme sahiptir.<\/p>\n<h2>Sonu\u00e7: Sistemlerinizi Daha Okunabilir ve Y\u00f6netilebilir Hale Getirin<\/h2>\n<p>Bu makalede <strong>Padr\u00e3o Mediator<\/strong>'\u0131 derinlemesine inceledik ve karma\u015f\u0131k sistemlerde bile\u015fenler aras\u0131 ileti\u015fimi nas\u0131l sadele\u015ftirdi\u011fini, ba\u011f\u0131ml\u0131l\u0131klar\u0131 nas\u0131l azaltt\u0131\u011f\u0131n\u0131 ve genel sistem mimarisini nas\u0131l daha esnek hale getirdi\u011fini g\u00f6rd\u00fck. Hava trafik kontrol\u00f6r\u00fcnden bir UI formu senaryosuna kadar farkl\u0131 \u00f6rneklerle, bu g\u00fc\u00e7l\u00fc davran\u0131\u015fsal tasar\u0131m deseninin mant\u0131\u011f\u0131n\u0131 ve uygulama ad\u0131mlar\u0131n\u0131 ele ald\u0131k. Unutmay\u0131n ki, her tasar\u0131m deseni gibi Mediator da belirli sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in tasarlanm\u0131\u015ft\u0131r ve her duruma uygun olmayabilir.<\/p>\n<p>Ancak, \u00f6zellikle b\u00fcy\u00fck \u00f6l\u00e7ekli ve \u00e7ok say\u0131da etkile\u015fimli bile\u015fen i\u00e7eren yaz\u0131l\u0131m projelerinde, Mediator deseni geli\u015ftiricilere b\u00fcy\u00fck kolayl\u0131klar sa\u011flayabilir. Bile\u015fenler aras\u0131ndaki direkt ba\u011f\u0131ml\u0131l\u0131klar\u0131 ortadan kald\u0131rarak kodun okunabilirli\u011fini art\u0131r\u0131r, bak\u0131m\u0131 kolayla\u015ft\u0131r\u0131r ve yeni \u00f6zelliklerin entegrasyonunu h\u0131zland\u0131r\u0131r. Dolay\u0131s\u0131yla, bir sonraki projenizde sisteminizdeki bile\u015fenler aras\u0131 ileti\u015fim karma\u015f\u0131kla\u015fmaya ba\u015flad\u0131\u011f\u0131nda, <strong>Padr\u00e3o Mediator<\/strong>'\u0131 bir \u00e7\u00f6z\u00fcm olarak de\u011ferlendirmeniz, yaz\u0131l\u0131m\u0131n\u0131z\u0131n uzun vadeli sa\u011fl\u0131\u011f\u0131 i\u00e7in ak\u0131ll\u0131ca bir yat\u0131r\u0131m olacakt\u0131r.<\/p>\n<div class=\"sss-container\">\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>S: Padr\u00e3o Mediator ve Observer deseni aras\u0131ndaki fark nedir?<\/strong><\/p>\n<p><strong>C:<\/strong> Her iki desen de nesneler aras\u0131 ileti\u015fimi kolayla\u015ft\u0131r\u0131r ancak farkl\u0131 yakla\u015f\u0131mlara sahiptir. Observer deseninde, \"Subject\" (konu) kendi \"Observer\" (g\u00f6zlemci) listesini tutar ve bir olay oldu\u011funda t\u00fcm g\u00f6zlemcilerini bilgilendirir. Observerlar birbirleri hakk\u0131nda bilgi sahibi de\u011fildir. Mediator deseninde ise, t\u00fcm ileti\u015fim merkezi bir <code>Mediator<\/code> nesnesi \u00fczerinden ge\u00e7er. Bile\u015fenler (Colleague'ler) birbirlerini de\u011fil, sadece <code>Mediator<\/code>'\u0131 tan\u0131r. Mediator, hangi bile\u015fenin ne zaman hangi bile\u015fenle etkile\u015fime girece\u011fine karar veren bir orkestrat\u00f6r g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<p><strong>S: Mediator deseni performans\u0131 etkiler mi?<\/strong><\/p>\n<p><strong>C:<\/strong> Teorik olarak, ek bir soyutlama katman\u0131 ve arabulucu \u00e7a\u011fr\u0131s\u0131 oldu\u011fu i\u00e7in do\u011frudan ileti\u015fime g\u00f6re \u00e7ok k\u00fc\u00e7\u00fck bir performans ek y\u00fck\u00fc olabilir. Ancak modern donan\u0131m ve yaz\u0131l\u0131m optimizasyonlar\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, bu ek y\u00fck \u00e7o\u011fu uygulama i\u00e7in g\u00f6z ard\u0131 edilebilir d\u00fczeydedir. Mediator'\u0131n getirdi\u011fi bak\u0131m kolayl\u0131\u011f\u0131 ve esneklik faydalar\u0131, genellikle bu k\u00fc\u00e7\u00fck performans maliyetinden daha a\u011f\u0131r basar.<\/p>\n<p><strong>S: Mediator desenini hangi programlama dillerinde kullanabilirim?<\/strong><\/p>\n<p><strong>C:<\/strong> Mediator deseni bir kavramsal modeldir ve herhangi bir nesne y\u00f6nelimli programlama dilinde (OOP) uygulanabilir. C#, Java, Python, JavaScript, C++, Ruby gibi dillerde yayg\u0131n olarak kullan\u0131l\u0131r. Dildeki aray\u00fcz, soyut s\u0131n\u0131f ve s\u0131n\u0131f kavramlar\u0131 deseni uygulamak i\u00e7in yeterlidir.<\/p>\n<p><strong>S: Ne zaman Mediator deseni kullanmaktan ka\u00e7\u0131nmal\u0131y\u0131m?<\/strong><\/p>\n<p><strong>C:<\/strong> E\u011fer sisteminizdeki bile\u015fenler aras\u0131 ileti\u015fim \u00e7ok basitse, sadece iki bile\u015fen do\u011frudan etkile\u015fime giriyorsa veya ileti\u015fim mant\u0131\u011f\u0131 \u00e7ok do\u011frusal ve az say\u0131da kural i\u00e7eriyorsa, Mediator desenini kullanmak gereksiz bir soyutlama katman\u0131 ve karma\u015f\u0131kl\u0131k getirebilir. Bu durumlarda do\u011frudan ileti\u015fim, Observer deseni veya komut deseni gibi daha basit \u00e7\u00f6z\u00fcmler daha uygun olabilir. Ayr\u0131ca, Mediator'\u0131n bir \"God Object\" haline gelme riski varsa, alternatif \u00e7\u00f6z\u00fcmler veya Mediator'\u0131 daha k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lme stratejileri d\u00fc\u015f\u00fcn\u00fclmelidir.<\/p>\n<\/p><\/div>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Padr\u00e3o Mediator: Karma\u015f\u0131k Sistemleri Nas\u0131l Sadele\u015ftiririz? Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir.&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31264","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?<\/title>\n<meta name=\"description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?\" \/>\n<meta property=\"og:description\" content=\"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-07T22:31:24+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?\",\"datePublished\":\"2025-10-07T22:31:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\"},\"wordCount\":3447,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\",\"name\":\"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-07T22:31:24+00:00\",\"description\":\"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?","description":"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/","og_locale":"tr_TR","og_type":"article","og_title":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?","og_description":"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-07T22:31:24+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?","datePublished":"2025-10-07T22:31:24+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/"},"wordCount":3447,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/","url":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/","name":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-07T22:31:24+00:00","description":"Modern yaz\u0131l\u0131m geli\u015ftirme, bile\u015fenler aras\u0131 ileti\u015fim a\u011flar\u0131 b\u00fcy\u00fcd\u00fck\u00e7e karma\u015f\u0131k bir yap\u0131ya b\u00fcr\u00fcnebilir. Peki, uygulamalar\u0131n\u0131zdaki bile\u015fenlerin birbirleriyle do\u011frudan konu\u015fmas\u0131 yerine, t\u00fcm bu etkile\u015fimi d\u00fczenleyen merkezi bir nokta olsayd\u0131 ne olurdu? Padr\u00e3o Mediator, i\u015fte tam da bu soruna zarif bir \u00e7\u00f6z\u00fcm sunarak, sistemlerinizi daha y\u00f6netilebilir ve esnek hale getirmenizi sa\u011fl\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/giris-bilesenler-arasi-kaosu-duzenlemenin-bir-yolu-var-mi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Giri\u015f: Bile\u015fenler Aras\u0131 Kaosu D\u00fczenlemenin Bir Yolu Var m\u0131?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31264"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31264\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}