{"id":32831,"date":"2025-10-26T11:31:19","date_gmt":"2025-10-26T08:31:19","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/"},"modified":"2025-10-26T11:31:19","modified_gmt":"2025-10-26T08:31:19","slug":"the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/","title":{"rendered":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m"},"content":{"rendered":"<p><body><\/p>\n<p>Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.<\/p>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme, s\u00fcrekli de\u011fi\u015fen gereksinimler ve b\u00fcy\u00fcmesi gereken sistemlerle doludur. Ancak, s\u0131kl\u0131kla kar\u015f\u0131la\u015f\u0131lan en b\u00fcy\u00fck zorluklardan biri, &#8220;miras kodu&#8221; olarak adland\u0131r\u0131lan, genellikle iyi belgelenmemi\u015f, karma\u015f\u0131k ve zamanla geli\u015ftirilmi\u015f kod tabanlar\u0131n\u0131 y\u00f6netmektir. Bir yaz\u0131l\u0131m projesi b\u00fcy\u00fcd\u00fck\u00e7e ve geli\u015ftik\u00e7e, ilk tasar\u0131m kararlar\u0131 yetersiz kalabilir ve &#8220;teknik bor\u00e7&#8221; birikmeye ba\u015flar. Bu durum, \u00f6zellikle kal\u0131t\u0131m hiyerar\u015filerinin a\u015f\u0131r\u0131 kullan\u0131ld\u0131\u011f\u0131, gev\u015fek ba\u011flama yerine s\u0131k\u0131 ba\u011flaman\u0131n hakim oldu\u011fu sistemlerde daha belirgin hale gelir. S\u0131k\u0131 ba\u011flamal\u0131 kod, bir bile\u015fende yap\u0131lan k\u00fc\u00e7\u00fck bir de\u011fi\u015fikli\u011fin, sistemin di\u011fer bir\u00e7ok b\u00f6l\u00fcm\u00fcnde beklenmedik yan etkilere yol a\u00e7abilece\u011fi anlam\u0131na gelir. Bu, geli\u015ftiricilerde yeni \u00f6zellik ekleme veya mevcut hatalar\u0131 d\u00fczeltme konusunda bir korku yarat\u0131r, \u00e7\u00fcnk\u00fc her dokunu\u015f, sistemin \u00e7\u00f6kme riskini beraberinde getirebilir. \u0130\u015fte bu noktada Gilded Rose Kata gibi pratik egzersizler, bu t\u00fcr zorluklarla g\u00fcvenli bir ortamda y\u00fczle\u015fmek ve daha iyi tasar\u0131m kal\u0131plar\u0131n\u0131 ke\u015ffetmek i\u00e7in paha bi\u00e7ilmez bir ara\u00e7 haline gelir.<\/p>\n<p>\u00d6zellikle uzun \u00f6m\u00fcrl\u00fc ve b\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda, miras kodunun bak\u0131m\u0131, yeni \u00f6zelliklerin entegrasyonu ve mevcut sistemin performans\u0131n\u0131n iyile\u015ftirilmesi, \u00f6nemli bir zaman ve kaynak yat\u0131r\u0131m\u0131n\u0131 gerektirir. Geli\u015ftiriciler, mevcut kodun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlamaya \u00e7al\u0131\u015f\u0131rken, genellikle bir &#8220;kaz\u0131 \u00e7al\u0131\u015fmas\u0131&#8221; yapmak zorunda kal\u0131rlar. Bu s\u00fcre\u00e7, sadece zaman al\u0131c\u0131 olmakla kalmaz, ayn\u0131 zamanda motivasyonu da d\u00fc\u015f\u00fcrebilir. Dahas\u0131, yetersiz test kapsam\u0131 veya hi\u00e7 test olmamas\u0131, de\u011fi\u015fikliklerin g\u00fcvenilirli\u011fini sa\u011flamay\u0131 imkans\u0131z hale getirir. Bu durum, zamanla sistemin daha da k\u00f6relmesine ve en sonunda tamamen yeniden yazma ihtiyac\u0131na yol a\u00e7abilir. Bu nedenle, yaz\u0131l\u0131m mimarisi kararlar\u0131, \u00f6zellikle de tasar\u0131m desenleri se\u00e7imi, projenin uzun vadeli sa\u011fl\u0131\u011f\u0131 i\u00e7in kritik \u00f6neme sahiptir. Kal\u0131t\u0131m yerine kompozisyonu tercih etmek gibi prensipler, i\u015fte bu teknik borcu azaltmak ve daha s\u00fcrd\u00fcr\u00fclebilir bir geli\u015ftirme s\u00fcreci sa\u011flamak i\u00e7in at\u0131labilecek en \u00f6nemli ad\u0131mlardan biridir.<\/p>\n<h2>Gilded Rose Kata Nedir ve Neden \u00d6nemlidir?<\/h2>\n<p>Gilded Rose Kata, yaz\u0131l\u0131m geli\u015ftiricilerin refactoring, test odakl\u0131 geli\u015ftirme (TDD) ve tasar\u0131m desenleri gibi temel becerilerini geli\u015ftirmeleri i\u00e7in tasarlanm\u0131\u015f pop\u00fcler bir kodlama egzersizidir. Bu kata, sizi hayali bir han d\u00fckkan\u0131na g\u00f6t\u00fcr\u00fcr ve g\u00f6reviniz, d\u00fckkandaki \u00e7e\u015fitli e\u015fyalar\u0131n kalitesini ve son kullanma tarihlerini belirli kurallara g\u00f6re g\u00fcncelleyen mevcut, karma\u015f\u0131k bir kodu iyile\u015ftirmektir. Ba\u015flang\u0131\u00e7ta verilen kod genellikle tek bir b\u00fcy\u00fck metot i\u00e7inde i\u00e7 i\u00e7e ge\u00e7mi\u015f karma\u015f\u0131k <code >if\/else<\/code> ko\u015fullar\u0131yla dolu, bak\u0131m\u0131 ve geni\u015fletmesi zor bir yap\u0131d\u0131r. Bu durum, klasik bir &#8220;miras kodu&#8221; senaryosunu m\u00fckemmel bir \u015fekilde temsil eder.<\/p>\n<p>Gilded Rose Kata&#8217;n\u0131n \u00f6nemi birka\u00e7 noktada yatmaktad\u0131r. \u0130lk olarak, mevcut, \u00e7al\u0131\u015fan ancak k\u00f6t\u00fc tasarlanm\u0131\u015f bir kod \u00fczerinde \u00e7al\u0131\u015fman\u0131n ger\u00e7ek d\u00fcnya zorluklar\u0131n\u0131 sim\u00fcle eder. Yeni bir projeye s\u0131f\u0131rdan ba\u015flamak yerine, var olan bir yap\u0131y\u0131 anlamaya ve iyile\u015ftirmeye odaklan\u0131rs\u0131n\u0131z. \u0130kinci olarak, sizi SOLID prensipleri gibi modern yaz\u0131l\u0131m tasar\u0131m ilkelerini uygulamaya te\u015fvik eder. \u00d6zellikle Tek Sorumluluk Prensibi (SRP) ve A\u00e7\u0131k\/Kapal\u0131 Prensibi (OCP), Gilded Rose&#8217;da kar\u015f\u0131la\u015f\u0131lan sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in kilit rol oynar. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, farkl\u0131 e\u015fya t\u00fcrleri i\u00e7in farkl\u0131 g\u00fcncelleme kurallar\u0131 oldu\u011fundan, bu durum Strateji Deseni (Strategy Pattern) gibi davran\u0131\u015fsal tasar\u0131m desenlerini uygulamak i\u00e7in ideal bir zemin haz\u0131rlar. \u00d6rne\u011fin, &#8220;Aged Brie&#8221; adl\u0131 e\u015fyan\u0131n kalitesi zamanla artarken, &#8220;Backstage passes&#8221; konser bileti gibi e\u015fyalar\u0131n kalitesi son kullanma tarihine yakla\u015ft\u0131k\u00e7a artar ve son kullanma tarihi ge\u00e7ince s\u0131f\u0131rlan\u0131r. &#8220;Sulfuras&#8221; gibi efsanevi e\u015fyalar\u0131n kalitesi ve son kullanma tarihi ise asla de\u011fi\u015fmez. &#8220;Conjured&#8221; e\u015fyalar\u0131n kalitesi ise di\u011fer e\u015fyalara g\u00f6re iki kat h\u0131zl\u0131 d\u00fc\u015fer.<\/p>\n<p>Bu farkl\u0131 ve karma\u015f\u0131k kurallar\u0131n tek bir yerde y\u00f6netilmesi, kodun okunabilirli\u011fini ve bak\u0131m\u0131n\u0131 inan\u0131lmaz derecede zorla\u015ft\u0131r\u0131r. Yeni bir e\u015fya t\u00fcr\u00fc veya mevcut bir e\u015fyan\u0131n kural\u0131nda yap\u0131lacak bir de\u011fi\u015fiklik, b\u00fcy\u00fck <code >if\/else<\/code> blo\u011funu daha da karma\u015f\u0131k hale getirme potansiyeli ta\u015f\u0131r. Gilded Rose Kata, i\u015fte bu noktada size bir &#8220;Aha!&#8221; an\u0131 ya\u015fatmay\u0131 hedefler: Kal\u0131t\u0131m tabanl\u0131 bir yakla\u015f\u0131m\u0131n neden bu kadar \u00e7abuk duvara toslayaca\u011f\u0131n\u0131 ve kompozisyon tabanl\u0131 bir yakla\u015f\u0131m\u0131n nas\u0131l daha esnek ve \u00f6l\u00e7eklenebilir \u00e7\u00f6z\u00fcmler sunabilece\u011fini g\u00f6sterir. Bu egzersiz, sadece kod yazma becerilerinizi de\u011fil, ayn\u0131 zamanda yaz\u0131l\u0131m tasar\u0131m\u0131 ve mimari d\u00fc\u015f\u00fcnce s\u00fcre\u00e7lerinizi de derinle\u015ftirmenize yard\u0131mc\u0131 olur.<\/p>\n<h3>Kal\u0131t\u0131m (Inheritance) Neden Gilded Rose Senaryosunda Yetersiz Kalabilir?<\/h3>\n<p>Kal\u0131t\u0131m, nesne y\u00f6nelimli programlaman\u0131n temel ta\u015flar\u0131ndan biridir ve &#8220;is-a&#8221; ili\u015fkisini modellemek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, &#8220;Araba bir Ta\u015f\u0131tt\u0131r&#8221; gibi. Kod tekrar\u0131n\u0131 azaltmak ve hiyerar\u015fik bir yap\u0131 olu\u015fturmak i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Ancak, Gilded Rose Kata gibi senaryolarda veya daha genel olarak, davran\u0131\u015flar\u0131n s\u0131k s\u0131k de\u011fi\u015fti\u011fi veya yeni davran\u0131\u015flar\u0131n eklendi\u011fi karma\u015f\u0131k sistemlerde, kal\u0131t\u0131m h\u0131zla yetersiz kalabilir ve hatta sorunlara yol a\u00e7abilir. Bunun temel nedenleri aras\u0131nda &#8220;fragile base class problem&#8221; (k\u0131r\u0131lgan temel s\u0131n\u0131f sorunu) ve &#8220;tight coupling&#8221; (s\u0131k\u0131 ba\u011flama) yer al\u0131r.<\/p>\n<p>Gilded Rose \u00f6rne\u011finde, ba\u015flang\u0131\u00e7ta <code >Item<\/code> ad\u0131nda bir s\u0131n\u0131f\u0131m\u0131z var. E\u011fer her e\u015fya tipi i\u00e7in kal\u0131t\u0131m kullanmaya kalk\u0131\u015fsayd\u0131k, <code >AgedBrie : Item<\/code>, <code >Sulfuras : Item<\/code>, <code >BackstagePass : Item<\/code> gibi bir yap\u0131 olu\u015fturabilirdik. Her alt s\u0131n\u0131f, kendi <code >updateQuality()<\/code> metodunu ge\u00e7ersiz k\u0131labilirdi. Ancak bu yakla\u015f\u0131m, k\u0131sa s\u00fcrede sorunlara yol a\u00e7ar. \u00d6rne\u011fin, &#8220;Conjured&#8221; e\u015fyalar\u0131n ortaya \u00e7\u0131kt\u0131\u011f\u0131n\u0131 varsayal\u0131m. Bu e\u015fyalar\u0131n kalitesi di\u011ferlerinden iki kat h\u0131zl\u0131 d\u00fc\u015fer. E\u011fer <code >Item<\/code> s\u0131n\u0131f\u0131nda temel bir <code >updateQuality()<\/code> metodu varsa ve <code >Conjured<\/code> bundan kal\u0131t\u0131m al\u0131yorsa, hem <code >Conjured<\/code>&#8216;\u0131n \u00f6zel kurallar\u0131n\u0131 uygulamas\u0131 hem de di\u011fer e\u015fyalar\u0131n kurallar\u0131n\u0131 iki kat h\u0131zla uygulamas\u0131n\u0131 sa\u011flamak karma\u015f\u0131k hale gelecektir. Bu durumda, ya <code >Item<\/code> s\u0131n\u0131f\u0131n\u0131n i\u00e7ine <code >Conjured<\/code>&#8216;a \u00f6zel mant\u0131k eklemek zorunda kal\u0131r\u0131z ki bu SRP&#8217;yi (Tek Sorumluluk Prensibi) bozar, ya da her alt s\u0131n\u0131f\u0131n <code >updateQuality()<\/code> metodunu yeniden yazarak kod tekrar\u0131na d\u00fc\u015feriz.<\/p>\n<p>Dahas\u0131, e\u011fer bir e\u015fya birden fazla davran\u0131\u015f kombinasyonuna sahip olabilseydi (\u00f6rne\u011fin, hem &#8220;Aged Brie&#8221; hem de &#8220;Conjured&#8221; \u00f6zellikleri olan bir e\u015fya), tek kal\u0131t\u0131m s\u0131n\u0131rlamas\u0131 nedeniyle bu imkans\u0131z hale gelirdi. Bu durum &#8220;\u00e7apraz kesi\u015fen endi\u015feler&#8221; olarak bilinir ve kal\u0131t\u0131m hiyerar\u015fileri bu t\u00fcr durumlar\u0131 iyi y\u00f6netemez. Her yeni davran\u0131\u015f kombinasyonu i\u00e7in yeni bir s\u0131n\u0131f hiyerar\u015fisi olu\u015fturmak, s\u0131n\u0131f patlamas\u0131na (class explosion) yol a\u00e7ar ve bak\u0131m kabusuna d\u00f6n\u00fc\u015f\u00fcr. Ayr\u0131ca, kal\u0131t\u0131m, \u00e7al\u0131\u015fma zaman\u0131nda nesnelerin davran\u0131\u015f\u0131n\u0131 dinamik olarak de\u011fi\u015ftirmeyi zorla\u015ft\u0131r\u0131r. Bir nesnenin temel davran\u0131\u015f\u0131n\u0131 de\u011fi\u015ftirmek istiyorsan\u0131z, genellikle o nesnenin s\u0131n\u0131f\u0131n\u0131 de\u011fi\u015ftirmek veya tamamen yeni bir nesne olu\u015fturmak zorunda kal\u0131rs\u0131n\u0131z. Bu k\u0131s\u0131tlamalar, Gilded Rose gibi evrilmeye a\u00e7\u0131k, kurallar\u0131n s\u0131k s\u0131k de\u011fi\u015febilece\u011fi bir sistemde kal\u0131t\u0131m\u0131 yetersiz ve k\u0131r\u0131lgan bir \u00e7\u00f6z\u00fcm haline getirir.<\/p>\n<h2>Kompozisyon (Composition) Nedir ve Kal\u0131t\u0131ma Neden Tercih Edilmelidir?<\/h2>\n<p>Kompozisyon, nesne y\u00f6nelimli tasar\u0131mda &#8220;has-a&#8221; (sahiptir) ili\u015fkisini modelleyen bir yakla\u015f\u0131md\u0131r. Bir nesnenin ba\u015fka nesnelerden olu\u015ftu\u011fu veya onlara sahip oldu\u011fu anlam\u0131na gelir. \u00d6rne\u011fin, &#8220;Araba bir Motora sahiptir&#8221;. Bu yakla\u015f\u0131mda, karma\u015f\u0131k bir nesnenin i\u015flevselli\u011fi, daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z ve odaklanm\u0131\u015f nesnelerin bir araya getirilmesiyle olu\u015fturulur. Kal\u0131t\u0131m\u0131n aksine, kompozisyon, nesneler aras\u0131nda gev\u015fek ba\u011flama (loose coupling) sa\u011flar ve bu da sistemin esnekli\u011fini, geni\u015fletilebilirli\u011fini ve test edilebilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Gilded Rose Kata senaryosunda, e\u015fyalar\u0131n farkl\u0131 g\u00fcncelleme kurallar\u0131na sahip olmas\u0131, kompozisyonun g\u00fcc\u00fcn\u00fc g\u00f6zler \u00f6n\u00fcne seren m\u00fckemmel bir \u00f6rnektir.<\/p>\n<p>Kompozisyonu kal\u0131t\u0131ma tercih etmenin bir\u00e7ok avantaj\u0131 vard\u0131r. \u0130lk olarak, &#8220;fragile base class problem&#8221; sorununu ortadan kald\u0131r\u0131r. Temel s\u0131n\u0131fta yap\u0131lan bir de\u011fi\u015fiklik, ondan t\u00fcreyen t\u00fcm alt s\u0131n\u0131flar\u0131 etkileyebilirken, kompozisyonda bir bile\u015fende yap\u0131lan de\u011fi\u015fiklik sadece o bile\u015feni kullanan nesneleri etkiler ve genellikle daha yerel kal\u0131r. \u0130kinci olarak, kompozisyon, \u00e7al\u0131\u015fma zaman\u0131nda nesnelerin davran\u0131\u015f\u0131n\u0131 dinamik olarak de\u011fi\u015ftirmeye olanak tan\u0131r. Bir nesnenin hangi bile\u015feni kulland\u0131\u011f\u0131n\u0131 de\u011fi\u015ftirerek, o nesnenin davran\u0131\u015f\u0131n\u0131 an\u0131nda ve kolayca de\u011fi\u015ftirebilirsiniz. Bu, \u00f6zellikle Strateji Deseni gibi tasar\u0131m desenlerinde kritik bir \u00f6zelliktir. \u00dc\u00e7\u00fcnc\u00fc olarak, kompozisyon daha iyi kod tekrar\u0131 sa\u011flar. K\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z bile\u015fenler, farkl\u0131 ba\u011flamlarda tekrar kullan\u0131labilir ve bu da kodun genel olarak daha mod\u00fcler ve DRY (Don&#8217;t Repeat Yourself) olmas\u0131n\u0131 sa\u011flar. Ayr\u0131ca, bu bile\u015fenlerin her biri kendi sorumlulu\u011funa sahip oldu\u011fu i\u00e7in (Tek Sorumluluk Prensibi &#8211; SRP), test edilmesi \u00e7ok daha kolayd\u0131r. Her bir bile\u015fen kendi ba\u015f\u0131na test edilebilir ve bu da sistemin genel g\u00fcvenilirli\u011fini art\u0131r\u0131r.<\/p>\n<p>\u00d6zetle, kompozisyon, sistemin par\u00e7alar\u0131 aras\u0131ndaki ba\u011f\u0131ml\u0131l\u0131klar\u0131 azaltarak daha sa\u011flam, esnek ve s\u00fcrd\u00fcr\u00fclebilir bir mimari olu\u015fturur. &#8220;Favor composition over inheritance&#8221; (Kal\u0131t\u0131m yerine kompozisyonu tercih et) prensibi, nesne y\u00f6nelimli tasar\u0131mda iyi bilinen bir d\u00fcsturdur ve Gilded Rose Kata, bu prensibi uygulamal\u0131 olarak deneyimlemek i\u00e7in ideal bir f\u0131rsat sunar. E\u015fyalar\u0131n g\u00fcncellenme mant\u0131\u011f\u0131n\u0131, e\u015fyan\u0131n kendisinin bir par\u00e7as\u0131 olarak g\u00f6rmek yerine, e\u015fyan\u0131n &#8220;sahip oldu\u011fu&#8221; bir g\u00fcncelleme stratejisi olarak ele almak, sistemdeki de\u011fi\u015fikliklerin \u00e7ok daha kolay ve g\u00fcvenli bir \u015fekilde y\u00f6netilmesini sa\u011flar.<\/p>\n<div class=\"interactive-tip\">\n  Uzman \u0130pucu: Kal\u0131t\u0131m ve kompozisyon aras\u0131ndaki dengeyi bulmak kritiktir. Genellikle, temel bir &#8220;is-a&#8221; ili\u015fkisi varsa kal\u0131t\u0131m, davran\u0131\u015flar\u0131n ve yeteneklerin birle\u015ftirilmesi gerekiyorsa kompozisyon tercih edilmelidir. Kompozisyon, \u00f6zellikle davran\u0131\u015fsal \u00e7e\u015fitlili\u011fin y\u00fcksek oldu\u011fu durumlarda size daha fazla esneklik sunar.\n<\/div>\n<h3>Gilded Rose Kata&#8217;da Kompozisyonu Uygulamak: Ad\u0131m Ad\u0131m Yakla\u015f\u0131m Nas\u0131l Olmal\u0131?<\/h3>\n<p>Gilded Rose Kata&#8217;da kompozisyonu uygulamak, mevcut karma\u015f\u0131k kodu daha y\u00f6netilebilir, esnek ve geni\u015fletilebilir bir yap\u0131ya d\u00f6n\u00fc\u015ft\u00fcrmek demektir. Bu s\u00fcreci ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h4>Refactoring Ad\u0131m\u0131 1: Mevcut Kodu Tan\u0131mlama ve \u0130zole Etme<\/h4>\n<p>\u0130lk ad\u0131m, genellikle a\u015fa\u011f\u0131daki gibi g\u00f6r\u00fcnen ba\u015flang\u0131\u00e7 kodunu anlamakt\u0131r. Tek bir <code >Item<\/code> s\u0131n\u0131f\u0131 ve t\u00fcm g\u00fcncelleme mant\u0131\u011f\u0131n\u0131 i\u00e7eren b\u00fcy\u00fck, monolitik bir <code >updateQuality<\/code> metodu. Bu metot, genellikle i\u00e7 i\u00e7e <code >if\/else if\/else<\/code> yap\u0131lar\u0131yla farkl\u0131 e\u015fya t\u00fcrleri i\u00e7in farkl\u0131 kurallar\u0131 bar\u0131nd\u0131r\u0131r.<\/p>\n<pre><code>\npublic class Item\n{\n    public string Name { get; set; }\n    public int SellIn { get; set; }\n    public int Quality { get; set; }\n}\n\npublic class GildedRose\n{\n    IList<Item> Items;\n\n    public GildedRose(IList<Item> Items)\n    {\n        this.Items = Items;\n    }\n\n    public void UpdateQuality()\n    {\n        foreach (var item in Items)\n        {\n            if (item.Name == \"Aged Brie\")\n            {\n                \/\/ Aged Brie \u00f6zel mant\u0131\u011f\u0131\n            }\n            else if (item.Name == \"Backstage passes to a TAFKAL80ETC concert\")\n            {\n                \/\/ Backstage Pass \u00f6zel mant\u0131\u011f\u0131\n            }\n            else if (item.Name == \"Sulfuras, Hand of Ragnaros\")\n            {\n                \/\/ Sulfuras \u00f6zel mant\u0131\u011f\u0131\n            }\n            else \/\/ Varsay\u0131lan e\u015fyalar ve Conjured e\u015fyalar\n            {\n                \/\/ Genel e\u015fya veya Conjured mant\u0131\u011f\u0131\n            }\n            \/\/ Di\u011fer karma\u015f\u0131k if\/else ko\u015fullar\u0131...\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu kodun en b\u00fcy\u00fck sorunu, Tek Sorumluluk Prensibi'ni (SRP) ihlal etmesidir. <code >GildedRose<\/code> s\u0131n\u0131f\u0131, hem e\u015fyalar\u0131 tutmak hem de t\u00fcm e\u015fya t\u00fcrlerinin g\u00fcncelleme mant\u0131\u011f\u0131n\u0131 bilmek gibi birden fazla sorumlulu\u011fa sahiptir. Herhangi bir yeni e\u015fya t\u00fcr\u00fc veya kural de\u011fi\u015fikli\u011fi, bu metot i\u00e7erisinde de\u011fi\u015fiklik yap\u0131lmas\u0131n\u0131 gerektirir, bu da A\u00e7\u0131k\/Kapal\u0131 Prensibi'ne (OCP) ayk\u0131r\u0131d\u0131r.<\/p>\n<h4>Refactoring Ad\u0131m\u0131 2: Davran\u0131\u015flar\u0131 Ay\u0131rmak i\u00e7in Strateji Deseni Kullan\u0131m\u0131<\/h4>\n<p>\u0130\u015fte kompozisyonun devreye girdi\u011fi yer buras\u0131. Her e\u015fya t\u00fcr\u00fcn\u00fcn kendi g\u00fcncelleme mant\u0131\u011f\u0131n\u0131 ayr\u0131 bir \"strateji\" nesnesi i\u00e7ine alaca\u011f\u0131z. Bu, Strateji Deseni'nin klasik bir uygulamas\u0131d\u0131r. \u00d6nce bir aray\u00fcz (interface) veya soyut s\u0131n\u0131f (abstract class) tan\u0131mlayarak i\u015fe ba\u015flayabiliriz:<\/p>\n<pre><code>\npublic interface IItemUpdateStrategy\n{\n    void Update(Item item);\n}\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, her bir e\u015fya t\u00fcr\u00fc i\u00e7in bu aray\u00fcz\u00fc uygulayan \u00f6zel strateji s\u0131n\u0131flar\u0131 olu\u015fturabiliriz:<\/p>\n<ul>\n<li><code >DefaultItemUpdateStrategy<\/code>: Normal e\u015fyalar i\u00e7in varsay\u0131lan mant\u0131\u011f\u0131 i\u00e7erir.<\/li>\n<li><code >AgedBrieUpdateStrategy<\/code>: Aged Brie'nin kalitesini art\u0131rma mant\u0131\u011f\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code >BackstagePassUpdateStrategy<\/code>: Backstage Pass'in karma\u015f\u0131k kalitesi mant\u0131\u011f\u0131n\u0131 i\u00e7erir.<\/li>\n<li><code >SulfurasUpdateStrategy<\/code>: Sulfuras'\u0131n de\u011fi\u015fmez kalitesini ve son kullanma tarihini y\u00f6netir (yani hi\u00e7bir \u015fey yapmaz).<\/li>\n<li><code >ConjuredItemUpdateStrategy<\/code>: Conjured e\u015fyalar\u0131n iki kat h\u0131zl\u0131 kalite d\u00fc\u015f\u00fc\u015f\u00fc mant\u0131\u011f\u0131n\u0131 i\u00e7erir.<\/li>\n<\/ul>\n<p>\u00d6rnek bir strateji implementasyonu:<\/p>\n<pre><code>\n\/\/ C# \u00f6rne\u011fi\npublic class AgedBrieUpdateStrategy : IItemUpdateStrategy\n{\n    public void Update(Item item)\n    {\n        if (item.Quality < 50)\n        {\n            item.Quality++;\n        }\n        item.SellIn--;\n        if (item.SellIn < 0 &#038;&#038; item.Quality < 50)\n        {\n            item.Quality++;\n        }\n    }\n}\n\npublic class DefaultItemUpdateStrategy : IItemUpdateStrategy\n{\n    public void Update(Item item)\n    {\n        if (item.Quality > 0)\n        {\n            item.Quality--;\n        }\n        item.SellIn--;\n        if (item.SellIn < 0 &#038;&#038; item.Quality > 0)\n        {\n            item.Quality--;\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi, <code >Item<\/code> s\u0131n\u0131f\u0131m\u0131z\u0131 veya <code >GildedRose<\/code> s\u0131n\u0131f\u0131m\u0131z\u0131 g\u00fcncelleyerek her <code >Item<\/code>'\u0131n kendine \u00f6zg\u00fc bir <code >IItemUpdateStrategy<\/code>'ye sahip olmas\u0131n\u0131 sa\u011flayabiliriz. Bu, kompozisyonun \u00f6z\u00fcd\u00fcr: <code >Item<\/code> nesnesi, art\u0131k kendi g\u00fcncelleme mant\u0131\u011f\u0131n\u0131 i\u00e7ermiyor, bunun yerine bu mant\u0131\u011f\u0131 bir ba\u015fka nesneye (<code >IItemUpdateStrategy<\/code>) \"devrediyor\" veya \"sahip oluyor\". <code >GildedRose<\/code> s\u0131n\u0131f\u0131 da art\u0131k t\u00fcm bu karma\u015f\u0131k <code >if\/else<\/code> bloklar\u0131n\u0131 i\u00e7ermek zorunda kalm\u0131yor. Sadece her bir <code >Item<\/code>'\u0131n atanan stratejisini \u00e7a\u011f\u0131rmas\u0131 yeterli oluyor.<\/p>\n<pre><code>\n\/\/ GildedRose s\u0131n\u0131f\u0131 art\u0131k daha basitle\u015fiyor\npublic class GildedRose\n{\n    private readonly IList<Item> _items;\n    private readonly Dictionary<string, IItemUpdateStrategy> _strategies;\n\n    public GildedRose(IList<Item> items)\n    {\n        _items = items;\n        \/\/ Stratejileri dinamik olarak y\u00fckleyebiliriz\n        _strategies = new Dictionary<string, IItemUpdateStrategy>\n        {\n            { \"Aged Brie\", new AgedBrieUpdateStrategy() },\n            { \"Backstage passes to a TAFKAL80ETC concert\", new BackstagePassUpdateStrategy() },\n            { \"Sulfuras, Hand of Ragnaros\", new SulfurasUpdateStrategy() },\n            { \"Conjured Mana Cake\", new ConjuredItemUpdateStrategy() } \/\/ Yeni Conjured e\u015fya\n        };\n    }\n\n    public void UpdateQuality()\n    {\n        foreach (var item in _items)\n        {\n            \/\/ Her e\u015fya i\u00e7in do\u011fru stratejiyi bul ve uygula\n            \/\/ E\u011fer e\u015fya i\u00e7in \u00f6zel bir strateji yoksa, Default stratejiyi kullan\n            IItemUpdateStrategy strategy = _strategies.ContainsKey(item.Name) \n                                            ? _strategies[item.Name] \n                                            : new DefaultItemUpdateStrategy();\n            \n            strategy.Update(item);\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yeni yap\u0131da, <code >GildedRose<\/code> s\u0131n\u0131f\u0131 sadece e\u015fyalar\u0131 y\u00f6netmekle ve uygun stratejiyi se\u00e7mekle sorumludur. Her bir strateji s\u0131n\u0131f\u0131 ise yaln\u0131zca kendi e\u015fya tipinin g\u00fcncelleme mant\u0131\u011f\u0131ndan sorumludur. Bu, SRP'ye uygun bir tasar\u0131md\u0131r ve kodun \u00e7ok daha okunabilir ve bak\u0131m\u0131 kolay olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Kompozisyonla Esnekli\u011fi Art\u0131rmak: Yeni Bir \u00dcr\u00fcn Tipi Eklemek Ne Kadar Kolay Olacak?<\/h3>\n<p>Kompozisyon tabanl\u0131 bir mimarinin en b\u00fcy\u00fck avantajlar\u0131ndan biri, sisteme yeni \u00f6zellikler veya davran\u0131\u015flar eklemenin ne kadar kolay oldu\u011fudur. Kal\u0131t\u0131m hiyerar\u015filerinde, yeni bir \u00f6zellik eklemek genellikle mevcut s\u0131n\u0131flar\u0131 de\u011fi\u015ftirmeyi veya yeni alt s\u0131n\u0131flar olu\u015fturmay\u0131 ve bunlar\u0131n t\u00fcm hiyerar\u015fiye uyumunu sa\u011flamay\u0131 gerektirir. Bu, \"k\u0131r\u0131lgan temel s\u0131n\u0131f\" sorununa veya \"s\u0131n\u0131f patlamas\u0131na\" yol a\u00e7abilir. Ancak kompozisyon ile durum farkl\u0131d\u0131r.<\/p>\n<p>Gilded Rose Kata \u00f6rne\u011fimizde, art\u0131k her e\u015fyan\u0131n kendine \u00f6zg\u00fc bir <code >IItemUpdateStrategy<\/code>'ye sahip oldu\u011funu g\u00f6rd\u00fck. Diyelim ki d\u00fckkana yeni bir e\u015fya t\u00fcr\u00fc olan \"Elixir of the Mongoose\" eklendi ve bu e\u015fyan\u0131n kalitesi di\u011fer normal e\u015fyalara g\u00f6re daha yava\u015f d\u00fc\u015f\u00fcyor veya belirli ko\u015fullar alt\u0131nda art\u0131yor. Bu yeni e\u015fyay\u0131 sisteme eklemek i\u00e7in yapmam\u0131z gereken tek \u015fey:<\/p>\n<ol>\n<li><code >IItemUpdateStrategy<\/code> aray\u00fcz\u00fcn\u00fc uygulayan yeni bir s\u0131n\u0131f (<code >ElixirUpdateStrategy<\/code> gibi) olu\u015fturmak. Bu s\u0131n\u0131f, \"Elixir of the Mongoose\" e\u015fyas\u0131na \u00f6zg\u00fc t\u00fcm g\u00fcncelleme kurallar\u0131n\u0131 i\u00e7erecektir.<\/li>\n<li><code >GildedRose<\/code> s\u0131n\u0131f\u0131m\u0131z\u0131n yap\u0131c\u0131 metodunda veya bir fabrika metodunda, \"Elixir of the Mongoose\" i\u00e7in bu yeni stratejiyi kaydetmek.<\/li>\n<\/ol>\n<pre><code>\n\/\/ Yeni strateji s\u0131n\u0131f\u0131\npublic class ElixirUpdateStrategy : IItemUpdateStrategy\n{\n    public void Update(Item item)\n    {\n        \/\/ Elixir'e \u00f6zg\u00fc mant\u0131k: \u00d6rne\u011fin, her 2 g\u00fcnde bir kalite d\u00fc\u015fer\n        if (item.Quality > 0)\n        {\n            if (item.SellIn % 2 == 0) \/\/ Sadece \u00e7ift g\u00fcnlerde kalite d\u00fc\u015fs\u00fcn\n            {\n                item.Quality--;\n            }\n        }\n        item.SellIn--;\n        if (item.SellIn < 0 &#038;&#038; item.Quality > 0)\n        {\n            item.Quality--; \/\/ Son kullanma tarihi ge\u00e7ince de d\u00fc\u015f\u00fc\u015f devam eder\n        }\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<pre><code>\n\/\/ GildedRose s\u0131n\u0131f\u0131 yap\u0131c\u0131 metodunda g\u00fcncelleme\npublic GildedRose(IList<Item> items)\n{\n    _items = items;\n    _strategies = new Dictionary<string, IItemUpdateStrategy>\n    {\n        \/\/ ... (mevcut stratejiler) ...\n        { \"Elixir of the Mongoose\", new ElixirUpdateStrategy() } \/\/ Yeni e\u015fyay\u0131 ekle\n    };\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu yakla\u015f\u0131m\u0131n g\u00fczelli\u011fi, mevcut hi\u00e7bir kodu (ne <code >Item<\/code> s\u0131n\u0131f\u0131n\u0131 ne de mevcut <code >IItemUpdateStrategy<\/code> implementasyonlar\u0131n\u0131) de\u011fi\u015ftirmek zorunda kalmamam\u0131zd\u0131r. Bu durum, A\u00e7\u0131k\/Kapal\u0131 Prensibi'ne (Open\/Closed Principle - OCP) m\u00fckemmel bir \u00f6rnektir: \"Yaz\u0131l\u0131m varl\u0131klar\u0131 (s\u0131n\u0131flar, mod\u00fcller, fonksiyonlar vb.) geli\u015ftirmeye a\u00e7\u0131k, ancak de\u011fi\u015ftirmeye kapal\u0131 olmal\u0131d\u0131r.\" Kompozisyon sayesinde, sistemimizi yeni davran\u0131\u015flar eklemeye a\u00e7m\u0131\u015f ancak mevcut, \u00e7al\u0131\u015fan kodumuzu de\u011fi\u015ftirmeye kapatm\u0131\u015f oluyoruz. Bu, yaz\u0131l\u0131m\u0131n daha sa\u011flam, daha az hata \u00fcreten ve bak\u0131m\u0131 \u00e7ok daha kolay bir hale gelmesini sa\u011flar. Yeni bir e\u015fya t\u00fcr\u00fc eklemek art\u0131k sadece yeni bir strateji s\u0131n\u0131f\u0131 yazmak ve onu sisteme kaydetmek kadar basittir, mevcut kodu \"k\u0131rma\" korkusu olmadan.<\/p>\n<h2>Ger\u00e7ek D\u00fcnya Senaryolar\u0131nda Kompozisyonun G\u00fcc\u00fc ve \u0130leri D\u00fczey \u0130pu\u00e7lar\u0131<\/h2>\n<p>Kompozisyon sadece Gilded Rose Kata gibi senaryolarda de\u011fil, bir\u00e7ok ger\u00e7ek d\u00fcnya uygulamas\u0131nda da kal\u0131t\u0131ma g\u00f6re daha esnek ve g\u00fc\u00e7l\u00fc \u00e7\u00f6z\u00fcmler sunar. \u0130\u015fte baz\u0131 vaka analizleri ve ileri d\u00fczey ipu\u00e7lar\u0131:<\/p>\n<h3>Vaka Analizi 1: Dinamik Form Alanlar\u0131 Olu\u015fturma<\/h3>\n<p>Bir web uygulamas\u0131nda dinamik formlar olu\u015fturman\u0131z gerekti\u011fini d\u00fc\u015f\u00fcn\u00fcn. Her form alan\u0131 (metin giri\u015fi, a\u00e7\u0131l\u0131r liste, tarih se\u00e7ici vb.) farkl\u0131 do\u011frulama kurallar\u0131na, farkl\u0131 g\u00f6r\u00fcnt\u00fclenme \u015fekillerine ve farkl\u0131 veri ba\u011flama mekanizmalar\u0131na sahip olabilir. Kal\u0131t\u0131m kullanarak bir <code >FormField<\/code> temel s\u0131n\u0131f\u0131ndan t\u00fcreyen <code >TextField<\/code>, <code >DropdownField<\/code> gibi s\u0131n\u0131flar olu\u015fturmak, her yeni do\u011frulama kural\u0131 veya g\u00f6r\u00fcnt\u00fcleme tipi i\u00e7in alt s\u0131n\u0131f hiyerar\u015fisini \u015fi\u015firecektir. \u00d6rne\u011fin, hem e-posta do\u011frulamas\u0131 hem de uzunluk k\u0131s\u0131tlamas\u0131 olan bir metin alan\u0131 i\u00e7in ayr\u0131 bir s\u0131n\u0131f olu\u015fturman\u0131z gerekebilir.<\/p>\n<p>Kompozisyon ile bu sorun kolayca a\u015f\u0131l\u0131r. Bir <code >FormField<\/code> s\u0131n\u0131f\u0131, bir <code >IValidator<\/code> listesine, bir <code >IRenderer<\/code> nesnesine ve bir <code >IDataBinder<\/code> nesnesine sahip olabilir. Yeni bir do\u011frulama kural\u0131 (\u00f6rne\u011fin, TC kimlik numaras\u0131 do\u011frulamas\u0131) eklemek istedi\u011finizde, sadece <code >IValidator<\/code> aray\u00fcz\u00fcn\u00fc uygulayan yeni bir s\u0131n\u0131f olu\u015fturur ve onu ilgili <code >FormField<\/code>'e eklersiniz. Mevcut kodda hi\u00e7bir de\u011fi\u015fiklik yapman\u0131z gerekmez. Ayn\u0131 \u015fekilde, yeni bir g\u00f6r\u00fcnt\u00fcleme bile\u015feni veya veri ba\u011flama stratejisi eklemek de sadece yeni bir bile\u015fen olu\u015fturmakla m\u00fcmk\u00fcnd\u00fcr. Bu, form sisteminizin inan\u0131lmaz derecede esnek ve geni\u015fletilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Vaka Analizi 2: Oyun Karakter Sistemleri<\/h3>\n<p>Modern video oyunlar\u0131nda karakterlerin yetenekleri, envanterleri, ekipmanlar\u0131 ve istatistikleri olduk\u00e7a karma\u015f\u0131kt\u0131r. Bir \"Sava\u015f\u00e7\u0131\" s\u0131n\u0131f\u0131ndan t\u00fcreyen bir \"Paladin\" veya \"Barbar\" gibi bir kal\u0131t\u0131m hiyerar\u015fisi olu\u015fturmak, karakterlerin \u00e7oklu s\u0131n\u0131fland\u0131rma (multi-classing) yapmas\u0131n\u0131 veya dinamik olarak yetenek de\u011fi\u015ftirmesini zorla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir b\u00fcy\u00fcc\u00fc ayn\u0131 zamanda k\u0131l\u0131\u00e7 ustas\u0131 olamaz.<\/p>\n<p>Kompozisyon bu senaryoda harikalar yarat\u0131r. Bir <code >Character<\/code> nesnesi, bir <code >IAbilityManager<\/code> (yetenekleri y\u00f6neten), bir <code >IInventory<\/code> (envanteri y\u00f6neten), bir <code >IEquipmentSlots<\/code> (ekipmanlar\u0131 y\u00f6neten) ve bir <code >IStats<\/code> (istatistikleri y\u00f6neten) gibi bile\u015fenlere sahip olabilir. Bir karakterin \"sava\u015f\u00e7\u0131\" veya \"b\u00fcy\u00fcc\u00fc\" olmas\u0131, sahip oldu\u011fu yetenek bile\u015fenleri, ekipmanlar\u0131 ve stat stratejileri taraf\u0131ndan belirlenir. Bu sayede, ayn\u0131 temel <code >Character<\/code> nesnesi, farkl\u0131 bile\u015fen kombinasyonlar\u0131 ile \u00e7ok \u00e7e\u015fitli karakter tiplerine d\u00f6n\u00fc\u015febilir. Bir karakterin yeteneklerini veya ekipman\u0131n\u0131 de\u011fi\u015ftirmek, sadece uygun bile\u015fenleri eklemek veya \u00e7\u0131karmak kadar basittir. Bu, oyun tasar\u0131mc\u0131lar\u0131na \u00e7ok daha fazla esneklik ve oyunculara daha zengin bir deneyim sunar.<\/p>\n<h3>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve P\u00fcf Noktalar\u0131<\/h3>\n<ul>\n<li><strong>Decorator Deseni ile Ek \u00d6zellikler:<\/strong> Kompozisyonun bir uzant\u0131s\u0131 olarak, Decorator Deseni, bir nesneye dinamik olarak yeni sorumluluklar eklemenizi sa\u011flar. \u00d6rne\u011fin, bir temel <code >ItemUpdateStrategy<\/code> \u00fczerine \"zehirli\" veya \"parlayan\" gibi ek \u00f6zellikler ekleyen dekorat\u00f6rler sarabilirsiniz. Bu, s\u0131n\u0131f patlamas\u0131na yol a\u00e7madan esnek davran\u0131\u015f kombinasyonlar\u0131 olu\u015fturman\u0131n g\u00fc\u00e7l\u00fc bir yoludur.<\/li>\n<li><strong>Dependency Injection (Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyonu):<\/strong> Kompozisyonun g\u00fcc\u00fcn\u00fc tam olarak kullanmak i\u00e7in ba\u011f\u0131ml\u0131l\u0131k enjeksiyonu prensibini benimseyin. Bile\u015fenlerinizi (stratejiler, validatorler vb.) elle olu\u015fturmak yerine, bunlar\u0131 yap\u0131land\u0131r\u0131c\u0131 (constructor) arac\u0131l\u0131\u011f\u0131yla ana nesnelere enjekte edin. Bu, test edilebilirli\u011fi art\u0131r\u0131r ve farkl\u0131 uygulamalar aras\u0131nda kolayca ge\u00e7i\u015f yapman\u0131z\u0131 sa\u011flar.<\/li>\n<li><strong>Fabrika Desenleri (Factory Patterns):<\/strong> \u00d6zellikle Gilded Rose Kata'da oldu\u011fu gibi, \u00e7al\u0131\u015fma zaman\u0131nda hangi stratejinin kullan\u0131laca\u011f\u0131na karar vermeniz gerekti\u011finde, Abstract Factory veya Factory Method desenleri olduk\u00e7a faydal\u0131d\u0131r. Bu desenler, nesne olu\u015fturma mant\u0131\u011f\u0131n\u0131 merkezi bir yere ta\u015f\u0131yarak kodu daha d\u00fczenli ve geni\u015fletilebilir hale getirir. \u00d6rne\u011fin, <code >GildedRose<\/code> s\u0131n\u0131f\u0131ndaki strateji <code >Dictionary<\/code>'si bir t\u00fcr basit fabrika g\u00f6revi g\u00f6r\u00fcr.<\/li>\n<li><strong>K\u00fc\u00e7\u00fck ve Tek Odakl\u0131 Bile\u015fenler:<\/strong> Kompozisyonu kullan\u0131rken en \u00f6nemli kural, bile\u015fenlerinizi k\u00fc\u00e7\u00fck, tek odakl\u0131 ve a\u00e7\u0131k\u00e7a tan\u0131mlanm\u0131\u015f sorumluluklara sahip tutmakt\u0131r. Her bir bile\u015fen, tek bir i\u015fi iyi yapmal\u0131d\u0131r. Bu, yeniden kullan\u0131labilirli\u011fi art\u0131r\u0131r ve test etmeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<h3>Mobil Uygulama Geli\u015ftirmede Kompozisyon ve Duyarl\u0131 Tasar\u0131m \u00d6rnekleri<\/h3>\n<p>Mobil uygulama geli\u015ftirme d\u00fcnyas\u0131nda da kompozisyonun \u00f6nemi yads\u0131namaz. \u00d6zellikle React Native, Flutter, SwiftUI veya Jetpack Compose gibi modern UI \u00e7er\u00e7eveleri, bile\u015fen tabanl\u0131 (component-based) bir mimariyi benimser. Bu \u00e7er\u00e7evelerde, UI'n\u0131z\u0131n her bir par\u00e7as\u0131 (d\u00fc\u011fme, kart, liste \u00f6\u011fesi) kendi i\u00e7inde ba\u011f\u0131ms\u0131z bir bile\u015fen olarak tasarlan\u0131r ve bu bile\u015fenler bir araya getirilerek daha b\u00fcy\u00fck, karma\u015f\u0131k UI'lar olu\u015fturulur. Bu yakla\u015f\u0131m, kompozisyonun \"bir araya getirerek in\u015fa etme\" felsefesinin do\u011frudan bir uygulamas\u0131d\u0131r. \u00d6rne\u011fin, bir \"\u00dcr\u00fcn Kart\u0131\" bile\u015feni, bir \"Resim\" bile\u015fenine, bir \"Ba\u015fl\u0131k\" bile\u015fenine ve bir \"Fiyat\" bile\u015fenine sahip olabilir.<\/p>\n<p>Kompozisyon, mobil uygulamalar\u0131n farkl\u0131 ekran boyutlar\u0131na ve y\u00f6nlendirmelerine uyum sa\u011flamas\u0131 gereken duyarl\u0131 tasar\u0131m (responsive design) ilkeleriyle de el ele gider. Bile\u015fenleriniz k\u00fc\u00e7\u00fck ve ba\u011f\u0131ms\u0131z oldu\u011funda, bir ekran boyutu de\u011fi\u015fti\u011finde veya cihaz d\u00f6nd\u00fcr\u00fcld\u00fc\u011f\u00fcnde, bu bile\u015fenlerin d\u00fczenini veya stilini medya sorgular\u0131 (media queries) veya ko\u015fullu renderlama (conditional rendering) kullanarak dinamik olarak ayarlamak \u00e7ok daha kolay olur. Her bir bile\u015fen, kendi duyarl\u0131 davran\u0131\u015f\u0131n\u0131 y\u00f6netebilir veya bu davran\u0131\u015f, onu i\u00e7eren \u00fcst bile\u015fenler taraf\u0131ndan ayarlanabilir, bu da karma\u015f\u0131k bir UI'nin farkl\u0131 cihazlarda tutarl\u0131 bir kullan\u0131c\u0131 deneyimi sunmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>A\u015fa\u011f\u0131daki basit HTML\/CSS \u00f6rne\u011fi, duyarl\u0131 tasar\u0131m\u0131n temelini olu\u015fturan medya sorgular\u0131n\u0131n nas\u0131l kullan\u0131labilece\u011fini g\u00f6sterir. Kompozisyonel UI'lerde, bu t\u00fcr stiller tek tek bile\u015fenlere uygulanarak her bile\u015fenin kendi i\u00e7inde duyarl\u0131 olmas\u0131 sa\u011flanabilir.<\/p>\n<pre><code class=\"language-html\">\n<style>\n    .container {\n        width: 100%;\n        padding: 10px;\n        box-sizing: border-box; \/* Padding'in geni\u015fli\u011fi etkilememesi i\u00e7in *\/\n    }\n    .card {\n        background-color: #f0f0f0;\n        border-radius: 8px;\n        padding: 15px;\n        margin-bottom: 15px;\n        box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n    }\n\n    \/* Mobil Cihazlar i\u00e7in (768px ve alt\u0131) *\/\n    @media (max-width: 768px) {\n        .card {\n            margin-bottom: 10px;\n            padding: 10px;\n            font-size: 0.9em;\n        }\n    }\n\n    \/* Tablet ve Daha B\u00fcy\u00fck Cihazlar i\u00e7in (769px ve \u00fczeri) *\/\n    @media (min-width: 769px) {\n        .container {\n            display: grid;\n            grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); \/* Esnek s\u00fctunlar *\/\n            gap: 20px;\n            padding: 20px;\n        }\n        .card {\n            margin-bottom: 0; \/* Grid ile bo\u015fluk y\u00f6netimi *\/\n            font-size: 1em;\n        }\n    }\n<\/style>\n\n<div class=\"container\">\n    <div class=\"card\"><h3>\u00dcr\u00fcn Ba\u015fl\u0131\u011f\u0131 1<\/h3><p>\u00dcr\u00fcn a\u00e7\u0131klamas\u0131 burada yer al\u0131r. K\u0131sa ve \u00f6z bilgiler.<\/p><\/div>\n    <div class=\"card\"><h3>\u00dcr\u00fcn Ba\u015fl\u0131\u011f\u0131 2<\/h3><p>Bu kart, \u00fcr\u00fcn detaylar\u0131n\u0131 kullan\u0131c\u0131ya sunar.<\/p><\/div>\n    <div class=\"card\"><h3>\u00dcr\u00fcn Ba\u015fl\u0131\u011f\u0131 3<\/h3><p>Farkl\u0131 ekran boyutlar\u0131nda uyumlu bir g\u00f6r\u00fcn\u00fcm sa\u011flar.<\/p><\/div>\n<\/div>\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code >.card<\/code> ve <code >.container<\/code> bile\u015fenlerinin stilleri, ekran boyutuna g\u00f6re de\u011fi\u015fiyor. Mobil cihazlarda kartlar dikey olarak y\u0131\u011f\u0131l\u0131rken, daha b\u00fcy\u00fck ekranlarda bir grid d\u00fczenine ge\u00e7i\u015f yap\u0131yor. Bu, kompozisyonel bir UI yap\u0131s\u0131nda her bir bile\u015fenin kendi stil ve davran\u0131\u015f\u0131n\u0131 nas\u0131l dinamik olarak y\u00f6netebilece\u011fine dair basit bir g\u00f6sterimdir.<\/p>\n<h2>Sonu\u00e7: Gilded Rose Kata Deneyimiyle Kal\u0131c\u0131 Bir Bak\u0131\u015f A\u00e7\u0131s\u0131 Edinmek<\/h2>\n<p>Gilded Rose Kata, ilk bak\u0131\u015fta basit gibi g\u00f6r\u00fcnen ancak derin yaz\u0131l\u0131m tasar\u0131m prensiplerini ke\u015ffetmek i\u00e7in inan\u0131lmaz derecede zengin bir \u00f6\u011frenme deneyimi sunan bir egzersizdir. Bu makalede g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, kal\u0131t\u0131m tabanl\u0131 bir yakla\u015f\u0131mla ba\u015flanmas\u0131 ka\u00e7\u0131n\u0131lmaz bir \u015fekilde karma\u015f\u0131kl\u0131\u011fa, s\u0131k\u0131 ba\u011flamaya ve bak\u0131m zorluklar\u0131na yol a\u00e7arken, kompozisyon tabanl\u0131 bir strateji (\u00f6zellikle Strateji Deseni kullan\u0131m\u0131yla) daha esnek, geni\u015fletilebilir ve s\u00fcrd\u00fcr\u00fclebilir bir mimari sunar.<\/p>\n<p>Kompozisyon, bir nesnenin sahip oldu\u011fu davran\u0131\u015flar\u0131 ayr\u0131\u015ft\u0131rarak, her bir sorumlulu\u011fu k\u00fc\u00e7\u00fck, test edilebilir ve yeniden kullan\u0131labilir bile\u015fenlere atar. Bu yakla\u015f\u0131m, sadece Gilded Rose gibi yapay senaryolarda de\u011fil, ger\u00e7ek d\u00fcnya uygulamalar\u0131n\u0131n dinamik form alanlar\u0131ndan oyun karakter sistemlerine kadar geni\u015f bir yelpazede kan\u0131tlanm\u0131\u015f bir tasar\u0131m prensibidir. Kompozisyon, yaz\u0131l\u0131m varl\u0131klar\u0131n\u0131 geli\u015ftirmeye a\u00e7\u0131k ancak de\u011fi\u015ftirmeye kapal\u0131 tutarak A\u00e7\u0131k\/Kapal\u0131 Prensibi'ne uyumu sa\u011flar, bu da teknik borcun birikmesini engeller ve yaz\u0131l\u0131m\u0131n \u00f6mr\u00fcn\u00fc uzat\u0131r.<\/p>\n<p>Gilded Rose Kata'y\u0131 tamamlamak, size sadece kod refactor etme becerisi kazand\u0131rmakla kalmaz, ayn\u0131 zamanda yaz\u0131l\u0131m tasar\u0131m\u0131 hakk\u0131nda kal\u0131c\u0131 bir bak\u0131\u015f a\u00e7\u0131s\u0131 sunar. Bir sonraki projenizde bir s\u0131n\u0131f hiyerar\u015fisi olu\u015fturmaya ba\u015flad\u0131\u011f\u0131n\u0131zda, kendinize \u015fu soruyu sorun: \"Bu bir 'is-a' ili\u015fkisi mi, yoksa 'has-a' ili\u015fkisi mi? Kal\u0131t\u0131m m\u0131 yoksa kompozisyon mu, bu davran\u0131\u015fsal karma\u015f\u0131kl\u0131\u011f\u0131 en iyi \u015fekilde y\u00f6netecek?\" Bu basit soru, daha iyi, daha sa\u011flam ve daha uzun \u00f6m\u00fcrl\u00fc yaz\u0131l\u0131mlar in\u015fa etmenize yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n        <strong>Kal\u0131t\u0131m hi\u00e7bir zaman kullan\u0131lmamal\u0131 m\u0131?<\/strong><br \/>\n        Hay\u0131r, kesinlikle de\u011fil. Kal\u0131t\u0131m, ger\u00e7ek bir \"is-a\" ili\u015fkisi oldu\u011funda ve alt s\u0131n\u0131flar\u0131n \u00fcst s\u0131n\u0131f\u0131n t\u00fcm \u00f6zellik ve davran\u0131\u015flar\u0131n\u0131 do\u011fal olarak devralmas\u0131 gerekti\u011finde hala ge\u00e7erli ve g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. \u00d6rne\u011fin, geometrik \u015fekiller (<code >Circle : Shape<\/code>, <code >Square : Shape<\/code>) i\u00e7in kal\u0131t\u0131m olduk\u00e7a uygundur. \u00d6nemli olan, kal\u0131t\u0131m\u0131 ne zaman ve nerede kullanaca\u011f\u0131n\u0131z\u0131 bilin\u00e7li olarak se\u00e7mektir, davran\u0131\u015fsal farkl\u0131l\u0131klar\u0131 modellemek i\u00e7in zorlamamak.\n    <\/li>\n<li>\n        <strong>Kompozisyon her zaman kal\u0131t\u0131mdan daha m\u0131 iyidir?<\/strong><br \/>\n        Genellikle evet, \u00f6zellikle davran\u0131\u015fsal \u00e7e\u015fitlili\u011fin ve dinamizmin y\u00fcksek oldu\u011fu durumlarda kompozisyon daha fazla esneklik ve bak\u0131m kolayl\u0131\u011f\u0131 sunar. Ancak her zaman tek do\u011fru \u00e7\u00f6z\u00fcm de\u011fildir. En iyi yakla\u015f\u0131m, her \u00f6zel senaryonun gereksinimlerini dikkatlice de\u011ferlendirerek bir denge bulmakt\u0131r. Kal\u0131t\u0131m, basit hiyerar\u015fik yap\u0131land\u0131rma ve varsay\u0131lan davran\u0131\u015flar sa\u011flamak i\u00e7in hala uygun olabilir.\n    <\/li>\n<li>\n        <strong>Gilded Rose Kata'y\u0131 nerede bulabilirim?<\/strong><br \/>\n        Gilded Rose Kata'n\u0131n bir\u00e7ok farkl\u0131 programlama dilinde (Java, C#, Python, JavaScript vb.) implementasyonlar\u0131n\u0131 ve a\u00e7\u0131klamalar\u0131n\u0131 online olarak bulabilirsiniz. Genellikle GitHub \u00fczerinde \"Gilded Rose Kata\" aramas\u0131 yaparak veya \u00e7e\u015fitli bloglarda ve kodlama platformlar\u0131nda (\u00f6rne\u011fin Kata-Log) kaynaklara ula\u015fabilirsiniz.\n    <\/li>\n<li>\n        <strong>Kompozisyonun dezavantajlar\u0131 nelerdir?<\/strong><br \/>\n        Kompozisyon, genellikle kal\u0131t\u0131ma g\u00f6re daha fazla say\u0131da s\u0131n\u0131f veya aray\u00fcz olu\u015fturman\u0131z\u0131 gerektirebilir, bu da ba\u015flang\u0131\u00e7taki kod karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve \u00f6\u011frenme e\u011frisini art\u0131rabilir. Ayr\u0131ca, bile\u015fenler aras\u0131ndaki ba\u011flant\u0131lar\u0131 (ba\u011f\u0131ml\u0131l\u0131klar\u0131) dikkatlice y\u00f6netmek gerekir. Ancak bu dezavantajlar genellikle, uzun vadede elde edilen esneklik ve bak\u0131m kolayl\u0131\u011f\u0131 avantajlar\u0131 kar\u015f\u0131s\u0131nda k\u00fc\u00e7\u00fck kal\u0131r. Ba\u011f\u0131ml\u0131l\u0131k Enjeksiyonu ve Fabrika Desenleri gibi teknikler, bu karma\u015f\u0131kl\u0131\u011f\u0131 y\u00f6netmeye yard\u0131mc\u0131 olur.\n    <\/li>\n<\/ul>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata,&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-32831","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>The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m<\/title>\n<meta name=\"description\" content=\"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.\" \/>\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\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m\" \/>\n<meta property=\"og:description\" content=\"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T08:31:19+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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m\",\"datePublished\":\"2025-10-26T08:31:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\"},\"wordCount\":4487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\",\"name\":\"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-26T08:31:19+00:00\",\"description\":\"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m\"}]},{\"@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":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m","description":"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.","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\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/","og_locale":"tr_TR","og_type":"article","og_title":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m","og_description":"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.","og_url":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-26T08:31:19+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m","datePublished":"2025-10-26T08:31:19+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/"},"wordCount":4487,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/","url":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/","name":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-26T08:31:19+00:00","description":"Kal\u0131t\u0131m yoluyla geni\u015fleyen karma\u015f\u0131k ve bak\u0131m\u0131 zor kod tabanlar\u0131yla m\u00fccadele etmek, bir\u00e7ok geli\u015ftiricinin ortak sorunudur. Gilded Rose Kata, i\u015fte tam da bu noktada, yaz\u0131l\u0131m tasar\u0131m prensiplerini uygulamal\u0131 olarak \u00f6\u011frenmek ve kompozisyonun esnek g\u00fcc\u00fcn\u00fc ke\u015ffetmek i\u00e7in harika bir f\u0131rsat sunar. Bu makale, Gilded Rose senaryosu \u00fczerinden kal\u0131t\u0131m yerine kompozisyonu tercih etmenin sundu\u011fu avantajlar\u0131 ad\u0131m ad\u0131m ele alacak, daha bak\u0131m\u0131 kolay, geni\u015fletilebilir ve test edilebilir yaz\u0131l\u0131m mimarileri in\u015fa etmenin yollar\u0131n\u0131 g\u00f6sterecektir.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/the-gilded-rose-kata-kalitim-yerine-kompozisyon-ile-esnek-tasarim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Gilded Rose Kata: Kal\u0131t\u0131m Yerine Kompozisyon ile Esnek Tasar\u0131m"}]},{"@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\/32831","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=32831"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32831\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}