{"id":40773,"date":"2026-03-01T06:40:40","date_gmt":"2026-03-01T03:40:40","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40773"},"modified":"2026-03-01T06:40:40","modified_gmt":"2026-03-01T03:40:40","slug":"kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/","title":{"rendered":"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek"},"content":{"rendered":"<p><body><\/p>\n<h2>Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek<\/h2>\n<p>Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, kod kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve y\u00f6netilebilirli\u011fini art\u0131rmak i\u00e7in bir\u00e7ok prensip ve metodoloji ortaya konulmu\u015ftur. Bu prensiplerin ba\u015f\u0131nda gelenlerden biri de &#8220;DRY&#8221; (Don&#8217;t Repeat Yourself &#8211; Kendini Tekrar Etme) prensibidir. DRY, yaz\u0131l\u0131m m\u00fchendisli\u011finde temel bir ilke olup, kodun tekrar\u0131n\u0131 \u00f6nleyerek daha temiz, daha verimli ve daha bak\u0131m\u0131 kolay sistemler olu\u015fturmay\u0131 hedefler. Bu makalede, DRY prensibinin ne oldu\u011funu, neden bu kadar \u00f6nemli oldu\u011funu, yaz\u0131l\u0131mc\u0131lar\u0131n bu prensibi uygulamak i\u00e7in hangi teknikleri kullanabilece\u011fini ve a\u015f\u0131r\u0131ya ka\u00e7man\u0131n potansiyel tuzaklar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>DRY Prensibi Nedir?<\/h3>\n<p>DRY prensibi, ilk olarak Andy Hunt ve Dave Thomas taraf\u0131ndan &#8220;The Pragmatic Programmer&#8221; adl\u0131 kitaplar\u0131nda pop\u00fclerle\u015ftirilmi\u015ftir. Temel olarak, &#8220;Her bilgi par\u00e7as\u0131 sistem i\u00e7inde tek, a\u00e7\u0131k ve yetkili bir temsile sahip olmal\u0131d\u0131r&#8221; ilkesini savunur. Buradaki &#8220;bilgi par\u00e7as\u0131&#8221; sadece kod sat\u0131rlar\u0131 anlam\u0131na gelmez; ayn\u0131 zamanda veritaban\u0131 \u015femalar\u0131, test senaryolar\u0131, yap\u0131land\u0131rma dosyalar\u0131, belgeler ve hatta i\u015f mant\u0131\u011f\u0131 gibi her t\u00fcrl\u00fc bilgiyi kapsar.<\/p>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcrecinde, bir i\u015f kural\u0131n\u0131n veya bir hesaplama mant\u0131\u011f\u0131n\u0131n birden fazla yerde tan\u0131mlanmas\u0131 veya uygulanmas\u0131 durumu s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan bir problemdir. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n ya\u015f\u0131n\u0131 hesaplayan bir kod blo\u011funun hem kullan\u0131c\u0131 profil sayfas\u0131nda, hem raporlama mod\u00fcl\u00fcnde, hem de bildirim servisinde ayr\u0131 ayr\u0131 yaz\u0131ld\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. Bu, DRY prensibinin do\u011frudan ihlalidir. DRY prensibi, bu t\u00fcr tekrarlar\u0131n \u00f6n\u00fcne ge\u00e7erek, ayn\u0131 mant\u0131\u011f\u0131n tek bir yerde tan\u0131mlanmas\u0131n\u0131 ve di\u011fer yerlerin bu tek tan\u0131ma ba\u015fvurmas\u0131n\u0131 (referans vermesini) sa\u011flar.<\/p>\n<p>Prensibin \u00f6z\u00fc, bir sistemde ayn\u0131 bilginin veya mant\u0131\u011f\u0131n birden fazla yerde bulunmas\u0131n\u0131n ciddi maliyetlere yol a\u00e7mas\u0131d\u0131r. Tekrar, sadece kod sat\u0131rlar\u0131n\u0131n kopyalanmas\u0131 anlam\u0131na gelmez; ayn\u0131 zamanda ayn\u0131 i\u015flevselli\u011fin farkl\u0131 adlarla veya biraz farkl\u0131 varyasyonlarla birden fazla kez uygulanmas\u0131 da bir tekrar bi\u00e7imidir. DRY, bu t\u00fcr tekrarlar\u0131n ortadan kald\u0131r\u0131lmas\u0131yla yaz\u0131l\u0131m\u0131n kalitesini art\u0131rmay\u0131 ve geli\u015ftirme s\u00fcre\u00e7lerini optimize etmeyi ama\u00e7lar.<\/p>\n<h3>Neden DRY Prensibi Bu Kadar \u00d6nemli? Tekrar\u0131n Maliyetleri<\/h3>\n<p>Tekrar eden kod (veya bilgi), ba\u015flang\u0131\u00e7ta zaman kazand\u0131r\u0131yor gibi g\u00f6r\u00fcnse de, uzun vadede projelere ciddi maliyetler y\u00fckler. Bu maliyetler sadece finansal de\u011fil, ayn\u0131 zamanda zaman, emek ve sistemin genel sa\u011fl\u0131\u011f\u0131 \u00fczerinde de olumsuz etkiler yarat\u0131r.<\/p>\n<h4>Bak\u0131m Zorlu\u011fu ve Y\u00fcksek Maliyet<\/h4>\n<p>Bir i\u015f kural\u0131n\u0131n veya bir hesaplama mant\u0131\u011f\u0131n\u0131n birden fazla yerde tekrarland\u0131\u011f\u0131n\u0131 varsayal\u0131m. Bu mant\u0131kta bir de\u011fi\u015fiklik yap\u0131lmas\u0131 gerekti\u011finde, geli\u015ftiricinin sistemdeki t\u00fcm kopyalar\u0131n\u0131 bulup g\u00fcncellemesi gerekir. Bu s\u00fcre\u00e7, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde son derece zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k olabilir. Geli\u015ftiricinin bir kopyay\u0131 g\u00f6zden ka\u00e7\u0131rmas\u0131 durumunda, sistemde tutars\u0131z davran\u0131\u015flar ve beklenmedik hatalar ortaya \u00e7\u0131kar. Bu durum, bak\u0131m maliyetlerini do\u011frudan art\u0131r\u0131r. DRY prensibi uyguland\u0131\u011f\u0131nda, bir mant\u0131k tek bir yerde bulunur ve de\u011fi\u015fiklikler sadece o tek noktada yap\u0131l\u0131r, bu da bak\u0131m s\u00fcrecini basitle\u015ftirir ve maliyetleri d\u00fc\u015f\u00fcr\u00fcr.<\/p>\n<h4>Hata Olas\u0131l\u0131\u011f\u0131n\u0131n Artmas\u0131<\/h4>\n<p>Tekrar eden kod, hata olas\u0131l\u0131\u011f\u0131n\u0131 katlayarak art\u0131r\u0131r. Bir kod blo\u011funda bir hata tespit edildi\u011finde, bu hatan\u0131n t\u00fcm kopyalar\u0131nda d\u00fczeltilmesi gerekir. E\u011fer bu d\u00fczeltme t\u00fcm kopyalara uygulanmazsa, sistemde farkl\u0131 yerlerde farkl\u0131 davran\u0131\u015flar sergileyen ve farkl\u0131 sonu\u00e7lar \u00fcreten hatal\u0131 kod par\u00e7alar\u0131 kal\u0131r. Bu durum, hata ay\u0131klama s\u00fcrecini kabusa \u00e7evirebilir ve sistemin g\u00fcvenilirli\u011fini ciddi \u015fekilde zedeleyebilir. DRY, hatan\u0131n tek bir yerde d\u00fczeltilmesini sa\u011flayarak, hatan\u0131n yay\u0131lmas\u0131n\u0131 engeller ve sistemin genel kalitesini art\u0131r\u0131r.<\/p>\n<h4>Geli\u015ftirme S\u00fcresinin Uzamas\u0131<\/h4>\n<p>Ayn\u0131 veya benzer i\u015flevselli\u011fi tekrar tekrar yazmak, geli\u015ftiricinin zaman\u0131n\u0131 bo\u015fa harcar. Her yeni \u00f6zellik eklemede veya mevcut bir \u00f6zelli\u011fi geni\u015fletmede, geli\u015ftiricinin zaten var olan bir mant\u0131\u011f\u0131 yeniden d\u00fc\u015f\u00fcnmesi ve kodlamas\u0131 gerekir. Bu durum, geli\u015ftirme h\u0131z\u0131n\u0131 d\u00fc\u015f\u00fcr\u00fcr ve projenin teslim s\u00fcrelerini uzatabilir. DRY prensibi, mevcut, test edilmi\u015f ve g\u00fcvenilir kod par\u00e7alar\u0131n\u0131n yeniden kullan\u0131lmas\u0131n\u0131 te\u015fvik ederek, geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r ve geli\u015ftiricilerin daha yarat\u0131c\u0131 ve karma\u015f\u0131k sorunlara odaklanmas\u0131na olanak tan\u0131r.<\/p>\n<h4>Kod \u015ei\u015fkinli\u011fi (Code Bloat) ve Anla\u015f\u0131labilirlik Zorlu\u011fu<\/h4>\n<p>Tekrar eden kod, kod taban\u0131n\u0131n gereksiz yere b\u00fcy\u00fcmesine neden olur. Bu &#8220;kod \u015fi\u015fkinli\u011fi&#8221;, projenin genel boyutunu art\u0131r\u0131r, derleme s\u00fcrelerini uzat\u0131r ve kaynak t\u00fcketimini art\u0131rabilir. Daha da \u00f6nemlisi, tekrar eden kod, kodun okunabilirli\u011fini ve anla\u015f\u0131labilirli\u011fini zorla\u015ft\u0131r\u0131r. Ayn\u0131 mant\u0131\u011f\u0131n farkl\u0131 varyasyonlarla veya farkl\u0131 ba\u011flamlarda tekrar tekrar g\u00f6r\u00fclmesi, yeni geli\u015ftiricilerin sisteme adapte olmas\u0131n\u0131 g\u00fc\u00e7le\u015ftirir ve mevcut geli\u015ftiricilerin bile kodun amac\u0131n\u0131 anlamas\u0131n\u0131 karma\u015f\u0131k hale getirir. DRY, kod taban\u0131n\u0131 daha kompakt, daha d\u00fczenli ve daha kolay anla\u015f\u0131l\u0131r hale getirir.<\/p>\n<h4>Test Zorlu\u011fu<\/h4>\n<p>Tekrar eden kod, test s\u00fcre\u00e7lerini de olumsuz etkiler. Ayn\u0131 mant\u0131\u011f\u0131n birden fazla kopyas\u0131 varsa, bu kopyalar\u0131n her birinin ayr\u0131 ayr\u0131 test edilmesi gerekir. Bu, test senaryolar\u0131n\u0131n say\u0131s\u0131n\u0131 art\u0131r\u0131r, test s\u00fcresini uzat\u0131r ve test kapsam\u0131n\u0131n eksik kalma riskini art\u0131r\u0131r. DRY prensibi sayesinde, bir mant\u0131k tek bir yerde uyguland\u0131\u011f\u0131nda, sadece o tek kod par\u00e7as\u0131n\u0131n kapsaml\u0131 bir \u015fekilde test edilmesi yeterlidir. Bu, test s\u00fcre\u00e7lerini basitle\u015ftirir, test s\u00fcresini k\u0131salt\u0131r ve testlerin daha g\u00fcvenilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>DRY Prensibini Uygulama Y\u00f6ntemleri ve Teknikler<\/h3>\n<p>DRY prensibini uygulamak i\u00e7in bir\u00e7ok farkl\u0131 teknik ve ara\u00e7 mevcuttur. Bu teknikler, farkl\u0131 soyutlama seviyelerinde ve farkl\u0131 programlama paradigmalar\u0131nda kullan\u0131labilir.<\/p>\n<h4>Fonksiyonlar ve Metotlar<\/h4>\n<p>Tekrar eden kod bloklar\u0131n\u0131 ortadan kald\u0131rman\u0131n en temel ve yayg\u0131n yolu, onlar\u0131 bir fonksiyona veya metoda ta\u015f\u0131makt\u0131r. E\u011fer ayn\u0131 i\u015flem birden fazla yerde yap\u0131l\u0131yorsa, bu i\u015flemi bir fonksiyon i\u00e7ine alarak ve her ihtiya\u00e7 duyuldu\u011funda bu fonksiyonu \u00e7a\u011f\u0131rarak kod tekrar\u0131n\u0131 \u00f6nleyebilirsiniz. Bu, \u00f6zellikle prosed\u00fcrel programlamada yayg\u0131n olarak kullan\u0131lan bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-python\"># DRY \u00f6ncesi: Tekrar eden kod\ndef calculate_total_order_page1(price, quantity, tax_rate):\n    subtotal = price * quantity\n    tax = subtotal * tax_rate\n    total = subtotal + tax\n    return total\n\ndef calculate_total_order_page2(price, quantity, tax_rate):\n    subtotal = price * quantity\n    tax = subtotal * tax_rate\n    total = subtotal + tax\n    return total\n\n<h2>DRY sonras\u0131: Fonksiyon kullan\u0131m\u0131<\/h2>\ndef calculate_order_total(price, quantity, tax_rate):\n    subtotal = price * quantity\n    tax = subtotal * tax_rate\n    total = subtotal + tax\n    return total\n\norder1_total = calculate_order_total(100, 2, 0.18)\norder2_total = calculate_order_total(50, 3, 0.18)<\/code><\/pre>\n<h4>S\u0131n\u0131flar ve Nesneler (Nesne Tabanl\u0131 Programlama)<\/h4>\n<p>Nesne Tabanl\u0131 Programlama (OOP), DRY prensibini do\u011fal olarak destekler. Ortak davran\u0131\u015flar\u0131 ve verileri s\u0131n\u0131flar i\u00e7inde kaps\u00fclleyerek, bu s\u0131n\u0131flar\u0131n nesnelerini farkl\u0131 yerlerde kullanabiliriz. Bir s\u0131n\u0131f, belirli bir varl\u0131\u011f\u0131n \u00f6zelliklerini (nitelikler) ve davran\u0131\u015flar\u0131n\u0131 (metotlar) tek bir yerde tan\u0131mlar. Bu sayede, ayn\u0131 varl\u0131\u011f\u0131n farkl\u0131 \u00f6rnekleri i\u00e7in kod tekrar\u0131 engellenir.<\/p>\n<pre><code class=\"language-java\">\/\/ DRY \u00f6ncesi: Tekrar eden veri ve davran\u0131\u015f tan\u0131mlar\u0131\npublic class UserRegistrationService {\n    public void registerUser(String username, String email, String password) {\n        \/\/ Kullan\u0131c\u0131 do\u011frulama, \u015fifreleme, veritaban\u0131 kayd\u0131 gibi i\u015flemler\n        System.out.println(\"Kullan\u0131c\u0131 \" + username + \" kaydedildi.\");\n    }\n}\n\npublic class AdminRegistrationService {\n    public void registerAdmin(String username, String email, String password) {\n        \/\/ Benzer do\u011frulama, \u015fifreleme, veritaban\u0131 kayd\u0131 i\u015flemleri\n        System.println(\"Admin \" + username + \" kaydedildi.\");\n    }\n}\n\n\/\/ DRY sonras\u0131: Ortak bir soyutlama (\u00f6rne\u011fin User s\u0131n\u0131f\u0131 ve bir servis)\npublic class User {\n    private String username;\n    private String email;\n    private String passwordHash; \/\/ \u015eifre do\u011frudan saklanmaz\n\n    public User(String username, String email, String password) {\n        this.username = username;\n        this.email = email;\n        this.passwordHash = hashPassword(password); \/\/ \u015eifreleme mant\u0131\u011f\u0131\n    }\n\n    private String hashPassword(String password) {\n        \/\/ \u015eifreleme algoritmas\u0131\n        return \"hashed_\" + password;\n    }\n\n    \/\/ Getter metotlar\u0131\n}\n\npublic class UserService {\n    public void register(User user) {\n        \/\/ Do\u011frulama, veritaban\u0131 kayd\u0131 gibi i\u015flemler\n        System.out.println(user.getUsername() + \" kaydedildi.\");\n    }\n}\n\n\/\/ Kullan\u0131m\nUser newUser = new User(\"ahmet\", \"ahmet@example.com\", \"parola123\");\nUserService userService = new UserService();\nuserService.register(newUser);<\/code><\/pre>\n<h4>Mod\u00fcller ve K\u00fct\u00fcphaneler<\/h4>\n<p>Daha geni\u015f \u00f6l\u00e7ekte, ortak i\u015flevsellikleri ayr\u0131 mod\u00fcller veya k\u00fct\u00fcphaneler halinde paketleyip farkl\u0131 projelerde veya uygulaman\u0131n farkl\u0131 b\u00f6l\u00fcmlerinde kullanmak da DRY prensibinin \u00f6nemli bir uygulamas\u0131d\u0131r. \u00d6rne\u011fin, bir tarih formatlama mod\u00fcl\u00fc veya bir matematiksel hesaplama k\u00fct\u00fcphanesi olu\u015fturmak, bu i\u015flevselliklerin her projede yeniden yaz\u0131lmas\u0131n\u0131 engeller.<\/p>\n<h4>Kal\u0131t\u0131m (Inheritance)<\/h4>\n<p>Kal\u0131t\u0131m, nesne tabanl\u0131 programlamada ortak \u00f6zellikleri ve davran\u0131\u015flar\u0131 \u00fcst s\u0131n\u0131fta tan\u0131mlay\u0131p alt s\u0131n\u0131flar\u0131n bunlar\u0131 miras almas\u0131n\u0131 sa\u011flayan bir mekanizmad\u0131r. Bu, kod tekrar\u0131n\u0131 azalt\u0131r ancak dikkatli kullan\u0131lmal\u0131d\u0131r. A\u015f\u0131r\u0131 veya yanl\u0131\u015f kal\u0131t\u0131m hiyerar\u015fileri, &#8220;elmas problemi&#8221; gibi sorunlara veya kat\u0131 ba\u011fl\u0131l\u0131klara yol a\u00e7abilir. Genellikle &#8220;kompozisyon kal\u0131t\u0131ma tercih edilmeli&#8221; (favor composition over inheritance) prensibi tavsiye edilir.<\/p>\n<h4>Kompozisyon (Composition)<\/h4>\n<p>Kompozisyon, bir s\u0131n\u0131f\u0131n di\u011fer s\u0131n\u0131flar\u0131n nesnelerini i\u00e7ermesi yoluyla i\u015flevsellikleri bir araya getirmesidir. Bu, kal\u0131t\u0131ma g\u00f6re daha esnek ve daha az ba\u011f\u0131ml\u0131l\u0131k yaratan bir yakla\u015f\u0131md\u0131r. Ortak davran\u0131\u015flar ayr\u0131 s\u0131n\u0131flar olarak tan\u0131mlan\u0131r ve ihtiya\u00e7 duyan s\u0131n\u0131flar bu davran\u0131\u015flar\u0131 &#8220;kullan\u0131r&#8221; (has-a ili\u015fkisi).<\/p>\n<pre><code class=\"language-java\">\/\/ Kal\u0131t\u0131m yerine kompozisyon \u00f6rne\u011fi\ninterface Flyable {\n    void fly();\n}\n\nclass Wings implements Flyable {\n    public void fly() {\n        System.out.println(\"Kanatlarla u\u00e7uyor.\");\n    }\n}\n\nclass JetEngine implements Flyable {\n    public void fly() {\n        System.out.println(\"Jet motoruyla u\u00e7uyor.\");\n    }\n}\n\nclass Bird {\n    private Flyable flyBehavior;\n\n    public Bird(Flyable flyBehavior) {\n        this.flyBehavior = flyBehavior;\n    }\n\n    public void performFly() {\n        flyBehavior.fly();\n    }\n}\n\n\/\/ Kullan\u0131m\nBird eagle = new Bird(new Wings());\neagle.performFly(); \/\/ Kanatlarla u\u00e7uyor.\n\nBird jetPlane = new Bird(new JetEngine());\njetPlane.performFly(); \/\/ Jet motoruyla u\u00e7uyor.<\/code><\/pre>\n<h4>\u015eablonlar (Templates)<\/h4>\n<p>Web geli\u015ftirme, belge olu\u015fturma veya kod \u00fcretimi gibi alanlarda tekrar eden yap\u0131lar\u0131 \u015fablonlarla y\u00f6netmek, DRY prensibinin \u00f6nemli bir uygulamas\u0131d\u0131r. HTML \u015fablon motorlar\u0131 (Jinja2, Thymeleaf, Handlebars), CSS preprocessor&#8217;lar\u0131 (Sass, Less) veya kod \u00fcretme ara\u00e7lar\u0131 (code generators) bu kategoriye girer.<\/p>\n<h4>Veritaban\u0131 Normalizasyonu<\/h4>\n<p>Veritaban\u0131 tasar\u0131m\u0131nda, veri tekrar\u0131n\u0131 \u00f6nlemek i\u00e7in normalizasyon kurallar\u0131 uygulan\u0131r. Veri tekrar\u0131, veritaban\u0131n\u0131n boyutunu art\u0131rman\u0131n yan\u0131 s\u0131ra, veri tutars\u0131zl\u0131klar\u0131na ve g\u00fcncelleme anomalilerine yol a\u00e7abilir. Normalizasyon, verileri daha k\u00fc\u00e7\u00fck, ili\u015fkili tablolara ay\u0131rarak bu sorunlar\u0131n \u00f6n\u00fcne ge\u00e7er.<\/p>\n<h4>Tasar\u0131m Kal\u0131plar\u0131 (Design Patterns)<\/h4>\n<p>Tasar\u0131m kal\u0131plar\u0131, belirli yaz\u0131l\u0131m sorunlar\u0131na kan\u0131tlanm\u0131\u015f, tekrar kullan\u0131labilir \u00e7\u00f6z\u00fcmler sunar. \u00d6rne\u011fin, &#8220;Strateji&#8221; kal\u0131b\u0131, bir algoritman\u0131n farkl\u0131 varyasyonlar\u0131n\u0131 ayr\u0131 s\u0131n\u0131flara ta\u015f\u0131yarak kod tekrar\u0131n\u0131 \u00f6nler. &#8220;Fabrika&#8221; kal\u0131b\u0131, nesne olu\u015fturma mant\u0131\u011f\u0131n\u0131 tek bir yerde toplayarak client kodunda tekrar\u0131 engeller. &#8220;\u015eablon Metot&#8221; kal\u0131b\u0131, bir algoritman\u0131n genel yap\u0131s\u0131n\u0131 bir \u00fcst s\u0131n\u0131fta tan\u0131mlay\u0131p alt s\u0131n\u0131flar\u0131n belirli ad\u0131mlar\u0131 kendi ihtiya\u00e7lar\u0131na g\u00f6re implemente etmesini sa\u011flar.<\/p>\n<h4>Konfig\u00fcrasyon Y\u00f6netimi<\/h4>\n<p>Sabit kodlanm\u0131\u015f (hardcoded) de\u011ferler yerine, uygulama ayarlar\u0131n\u0131 ve parametrelerini d\u0131\u015far\u0131dan konfig\u00fcrasyon dosyalar\u0131 (JSON, YAML, .env vb.) veya ortam de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek, DRY prensibine uygun bir yakla\u015f\u0131md\u0131r. Bu sayede, farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in ayn\u0131 kod taban\u0131 kullan\u0131labilir ve sadece konfig\u00fcrasyon de\u011fi\u015ftirilerek uygulama davran\u0131\u015f\u0131 adapte edilebilir.<\/p>\n<h4>Jenerik Programlama (Generics)<\/h4>\n<p>Jenerik programlama, t\u00fcrden ba\u011f\u0131ms\u0131z algoritmalar ve veri yap\u0131lar\u0131 olu\u015fturmay\u0131 sa\u011flar. \u00d6rne\u011fin, bir liste veya kuyruk veri yap\u0131s\u0131, farkl\u0131 t\u00fcrdeki elemanlar\u0131 bar\u0131nd\u0131rabilir ve bu veri yap\u0131s\u0131n\u0131n kodunun her t\u00fcr i\u00e7in ayr\u0131 ayr\u0131 yaz\u0131lmas\u0131na gerek kalmaz. Bu, \u00f6zellikle tip g\u00fcvenli\u011fi sa\u011flayan dillerde (Java, C#, TypeScript) \u00f6nemli bir DRY arac\u0131d\u0131r.<\/p>\n<h3>DRY&#8217;\u0131 A\u015f\u0131r\u0131ya Ka\u00e7\u0131rmamak: WET ve A-DRY<\/h3>\n<p>DRY prensibi son derece de\u011ferli olsa da, her prensip gibi a\u015f\u0131r\u0131ya ka\u00e7\u0131ld\u0131\u011f\u0131nda veya yanl\u0131\u015f anla\u015f\u0131ld\u0131\u011f\u0131nda zararl\u0131 sonu\u00e7lar do\u011furabilir. Burada iki \u00f6nemli kavram ortaya \u00e7\u0131kar: WET ve A-DRY.<\/p>\n<h4>WET (Write Everything Twice \/ We Enjoy Typing)<\/h4>\n<p>WET, DRY prensibinin tam tersidir. Bu durum, geli\u015ftiricilerin bilin\u00e7li veya bilin\u00e7siz olarak ayn\u0131 kodu tekrar tekrar yazmas\u0131 anlam\u0131na gelir. WET kodu, yukar\u0131da bahsedilen t\u00fcm bak\u0131m, hata, anla\u015f\u0131labilirlik ve geli\u015ftirme s\u00fcresi maliyetlerini ta\u015f\u0131r. Amac\u0131m\u0131z her zaman WET&#8217;ten ka\u00e7\u0131nmak olmal\u0131d\u0131r.<\/p>\n<h4>A-DRY (Accidentally Don&#8217;t Repeat Yourself &#8211; Yanl\u0131\u015fl\u0131kla Kendini Tekrar Etme)<\/h4>\n<p>A-DRY, DRY prensibini yanl\u0131\u015f veya erken uygulamaktan kaynaklanan bir sorundur. Bu durum genellikle \u015fu \u015fekillerde ortaya \u00e7\u0131kar:<\/p>\n<p>1.  <strong>Yanl\u0131\u015f Soyutlama (False Abstraction):<\/strong> Geli\u015ftiriciler, farkl\u0131 ba\u011flamlarda sadece y\u00fczeysel olarak benzer g\u00f6r\u00fcnen kod par\u00e7alar\u0131n\u0131 tek bir soyutlama alt\u0131nda birle\u015ftirmeye \u00e7al\u0131\u015fabilirler. Bu kod par\u00e7alar\u0131 ba\u015flang\u0131\u00e7ta ayn\u0131 g\u00f6r\u00fcnse de, gelecekte farkl\u0131 y\u00f6nlerde evrimle\u015fme potansiyeline sahip olabilirler. Onlar\u0131 erken birle\u015ftirmek, daha sonra bu soyutlamay\u0131 bozmak veya karma\u015f\u0131kla\u015ft\u0131rmak zorunda kalmaya yol a\u00e7ar. Sonu\u00e7, daha karma\u015f\u0131k, daha az esnek ve anla\u015f\u0131lmas\u0131 daha zor bir koddur.<\/p>\n<p>2.  <strong>Erken Optimizasyon (Premature Optimization):<\/strong> Gelecekteki olas\u0131 ihtiya\u00e7lar veya senaryolar i\u00e7in \u015fimdiden soyutlamalar yapmak, &#8220;\u0130htiyac\u0131n Olmayacak&#8221; (YAGNI &#8211; You Ain&#8217;t Gonna Need It) prensibine ayk\u0131r\u0131d\u0131r. Bir kod par\u00e7as\u0131n\u0131n ger\u00e7ekten tekrar edip etmeyece\u011fi veya farkl\u0131 ba\u011flamlarda ayn\u0131 kal\u0131p kalmayaca\u011f\u0131 belli de\u011filken soyutlama yapmak, gereksiz karma\u015f\u0131kl\u0131k ve ek y\u00fck getirebilir.<\/p>\n<p>A-DRY&#8217;\u0131n sonu\u00e7lar\u0131, DRY&#8217;\u0131n faydalar\u0131n\u0131 tamamen ortadan kald\u0131rabilir. Ortaya \u00e7\u0131kan soyutlama, ger\u00e7ekte oldu\u011fundan daha karma\u015f\u0131k hale gelir, esnekli\u011fini kaybeder ve bak\u0131m\u0131n\u0131 zorla\u015ft\u0131r\u0131r. Bu nedenle, DRY prensibini uygularken ne zaman durulaca\u011f\u0131n\u0131 bilmek \u00e7ok \u00f6nemlidir.<\/p>\n<h5>&#8220;\u00dc\u00e7 Kural\u0131&#8221; (Rule of Three)<\/h5>\n<p>Bu noktada &#8220;\u00dc\u00e7 Kural\u0131&#8221; faydal\u0131 bir rehber olabilir:<br \/>\n*   Bir kod par\u00e7as\u0131 bir kez g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde, onu oldu\u011fu gibi b\u0131rak\u0131n.<br \/>\n*   Bir kod par\u00e7as\u0131 iki kez g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde, hala bir soyutlama yapmay\u0131 d\u00fc\u015f\u00fcnmeyin (\u015fimdilik).<br \/>\n*   Bir kod par\u00e7as\u0131 \u00fc\u00e7\u00fcnc\u00fc kez g\u00f6r\u00fcnd\u00fc\u011f\u00fcnde, o zaman bir soyutlama yapmay\u0131 d\u00fc\u015f\u00fcnmenin zaman\u0131 gelmi\u015ftir.<\/p>\n<p>Bu kural, erken soyutlamadan ka\u00e7\u0131nmak ve sadece ger\u00e7ekten tekrar eden ve istikrarl\u0131 oldu\u011fu anla\u015f\u0131lan mant\u0131klar i\u00e7in soyutlama yapmak i\u00e7in bir k\u0131lavuz g\u00f6revi g\u00f6r\u00fcr. Esneklik ve basitlik aras\u0131ndaki dengeyi bulmak, deneyim ve iyi bir yarg\u0131 gerektirir.<\/p>\n<h3>DRY ve Di\u011fer Yaz\u0131l\u0131m Prensipleri<\/h3>\n<p>DRY prensibi, yaz\u0131l\u0131m m\u00fchendisli\u011findeki di\u011fer temel prensiplerle yak\u0131ndan ili\u015fkilidir ve genellikle onlarla birlikte daha etkili sonu\u00e7lar verir.<\/p>\n<h4>SOLID Prensipleri<\/h4>\n<p>DRY, \u00f6zellikle SOLID prensipleriyle g\u00fc\u00e7l\u00fc bir sinerji i\u00e7indedir:<\/p>\n<p>*   <strong>SRP (Single Responsibility Principle &#8211; Tek Sorumluluk Prensibi):<\/strong> Bir s\u0131n\u0131f\u0131n veya mod\u00fcl\u00fcn yaln\u0131zca tek bir sorumlulu\u011fu olmal\u0131d\u0131r. Bu prensip uyguland\u0131\u011f\u0131nda, belirli bir sorumlulu\u011fa ait mant\u0131k sadece bir yerde bulunur ve bu da do\u011fal olarak DRY&#8217;\u0131 destekler. E\u011fer bir s\u0131n\u0131f\u0131n birden fazla sorumlulu\u011fu varsa, o sorumluluklara ait kodlar tekrar etme e\u011filiminde olabilir.<br \/>\n*   <strong>OCP (Open\/Closed Principle &#8211; A\u00e7\u0131k\/Kapal\u0131 Prensibi):<\/strong> Yaz\u0131l\u0131m varl\u0131klar\u0131 (s\u0131n\u0131flar, mod\u00fcller, fonksiyonlar vb.) geli\u015ftirmeye a\u00e7\u0131k, ancak de\u011fi\u015fikli\u011fe kapal\u0131 olmal\u0131d\u0131r. Bu, mevcut kodu de\u011fi\u015ftirmeden yeni i\u015flevsellik eklemeyi sa\u011flar. Yeni \u00f6zellikler eklerken mevcut kodu tekrar tekrar kopyalamak yerine, geni\u015fletme mekanizmalar\u0131 (kal\u0131t\u0131m, kompozisyon, aray\u00fczler) kullanarak DRY prensibini destekler.<br \/>\n*   <strong>LSP (Liskov Substitution Principle &#8211; Liskov Yerine Ge\u00e7me Prensibi):<\/strong> Alt s\u0131n\u0131flar, \u00fcst s\u0131n\u0131flar\u0131n yerine ge\u00e7ebilir olmal\u0131d\u0131r. Bu prensip, ortak aray\u00fczler ve davran\u0131\u015flar yoluyla kod tekrar\u0131n\u0131 azalt\u0131r ve daha tutarl\u0131 bir hiyerar\u015fi sa\u011flar.<br \/>\n*   <strong>ISP (Interface Segregation Principle &#8211; Aray\u00fcz Ay\u0131rma Prensibi):<\/strong> \u0130stemciler, kullanmad\u0131klar\u0131 aray\u00fczlere ba\u011f\u0131ml\u0131 olmaya zorlanmamal\u0131d\u0131r. K\u00fc\u00e7\u00fck, \u00f6zelle\u015fmi\u015f aray\u00fczler olu\u015fturmak, s\u0131n\u0131flar\u0131n sadece ihtiya\u00e7 duyduklar\u0131 metotlar\u0131 uygulamalar\u0131n\u0131 sa\u011flar ve gereksiz implementasyon tekrar\u0131n\u0131 \u00f6nler.<br \/>\n*   <strong>DIP (Dependency Inversion Principle &#8211; Ba\u011f\u0131ml\u0131l\u0131k Tersine \u00c7evirme Prensibi):<\/strong> Y\u00fcksek seviyeli mod\u00fcllerin d\u00fc\u015f\u00fck seviyeli mod\u00fcllere ba\u011f\u0131ml\u0131 olmamas\u0131, soyutlamalar \u00fczerinden ileti\u015fim kurmas\u0131 gerekir. Bu prensip, mod\u00fcllerin daha az ba\u011f\u0131ml\u0131 ve daha tekrar kullan\u0131labilir olmas\u0131n\u0131 sa\u011flayarak DRY&#8217;\u0131 destekler.<\/p>\n<h4>YAGNI (You Ain&#8217;t Gonna Need It &#8211; \u0130htiyac\u0131n Olmayacak)<\/h4>\n<p>YAGNI prensibi, &#8220;\u0130htiya\u00e7 duymayaca\u011f\u0131n bir \u015feyi ekleme&#8221; der. Bu, gelecekteki olas\u0131 ihtiya\u00e7lar i\u00e7in gereksiz yere soyutlamalar veya genellemeler yapmaktan ka\u00e7\u0131nmay\u0131 te\u015fvik eder. YAGNI, A-DRY&#8217;dan ka\u00e7\u0131nmak i\u00e7in DRY ile birlikte d\u00fc\u015f\u00fcn\u00fclmesi gereken kritik bir prensiptir. Yaln\u0131zca mevcut ve kesinle\u015fmi\u015f tekrarlar i\u00e7in soyutlama yapmak, gereksiz karma\u015f\u0131kl\u0131\u011f\u0131 \u00f6nler.<\/p>\n<h4>KISS (Keep It Simple, Stupid &#8211; Basit Tut, Aptal)<\/h4>\n<p>KISS prensibi, karma\u015f\u0131k \u00e7\u00f6z\u00fcmler yerine her zaman en basit \u00e7\u00f6z\u00fcm\u00fc aramay\u0131 \u00f6nerir. DRY prensibini uygularken, karma\u015f\u0131k soyutlamalar veya tasar\u0131m kal\u0131plar\u0131 kullanmak yerine, m\u00fcmk\u00fcn oldu\u011funca basit ve anla\u015f\u0131l\u0131r bir \u00e7\u00f6z\u00fcm bulmak \u00f6nemlidir. Bazen basit bir fonksiyon veya k\u00fc\u00e7\u00fck bir s\u0131n\u0131f, karma\u015f\u0131k bir kal\u0131t\u0131m hiyerar\u015fisinden daha DRY ve daha y\u00f6netilebilir olabilir.<\/p>\n<h3>DRY&#8217;\u0131n Faydalar\u0131 \u00d6zetle<\/h3>\n<p>DRY prensibini uygulaman\u0131n yaz\u0131l\u0131m projeleri i\u00e7in say\u0131s\u0131z faydas\u0131 vard\u0131r:<\/p>\n<p>*   <strong>Daha Az Kod:<\/strong> Kod taban\u0131n\u0131n genel boyutunu k\u00fc\u00e7\u00fclt\u00fcr, bu da daha az dosya ve daha az sat\u0131r kodu anlam\u0131na gelir.<br \/>\n*   <strong>Daha Kolay Bak\u0131m ve G\u00fcncelleme:<\/strong> Bir i\u015f kural\u0131 veya mant\u0131k tek bir yerde tan\u0131mland\u0131\u011f\u0131 i\u00e7in, de\u011fi\u015fiklikler sadece o tek noktada yap\u0131l\u0131r ve sistem genelinde tutarl\u0131l\u0131k sa\u011flan\u0131r.<br \/>\n*   <strong>Daha Az Hata:<\/strong> Hatalar\u0131n tek bir yerde d\u00fczeltilmesi, hatan\u0131n sistem genelinde yay\u0131lmas\u0131n\u0131 engeller ve hata ay\u0131klama s\u00fcrecini basitle\u015ftirir.<br \/>\n*   <strong>Daha H\u0131zl\u0131 Geli\u015ftirme:<\/strong> Mevcut, test edilmi\u015f ve g\u00fcvenilir kod par\u00e7alar\u0131n\u0131n yeniden kullan\u0131lmas\u0131, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r.<br \/>\n*   <strong>Daha Anla\u015f\u0131l\u0131r ve Okunabilir Kod:<\/strong> Tekrar eden kodun olmamas\u0131, kodun amac\u0131n\u0131 anlamay\u0131 kolayla\u015ft\u0131r\u0131r ve yeni geli\u015ftiricilerin projeye adaptasyonunu h\u0131zland\u0131r\u0131r.<br \/>\n*   <strong>Daha Test Edilebilir Kod:<\/strong> Soyutlanm\u0131\u015f ve tek sorumlulu\u011fa sahip kod par\u00e7alar\u0131, birim testlerinin yaz\u0131lmas\u0131n\u0131 ve uygulanmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Daha Esnek ve Geni\u015fletilebilir Sistemler:<\/strong> \u0130yi tasarlanm\u0131\u015f soyutlamalar, sistemin gelecekteki de\u011fi\u015fikliklere ve yeni \u00f6zelliklere daha kolay adapte olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>DRY (Don&#8217;t Repeat Yourself) prensibi, modern yaz\u0131l\u0131m geli\u015ftirmenin temel ta\u015flar\u0131ndan biridir. Tekrar eden kodu, bilgiyi ve i\u015f mant\u0131\u011f\u0131n\u0131 ortadan kald\u0131rarak, yaz\u0131l\u0131m\u0131n kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve y\u00f6netilebilirli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bak\u0131m maliyetlerini d\u00fc\u015f\u00fcr\u00fcr, hata olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve daha anla\u015f\u0131l\u0131r sistemler olu\u015fturur.<\/p>\n<p>Ancak, DRY prensibini uygularken dengeli bir yakla\u015f\u0131m benimsemek esast\u0131r. Erken soyutlamadan, yanl\u0131\u015f genellemelerden ve gereksiz karma\u015f\u0131kl\u0131ktan ka\u00e7\u0131nmak i\u00e7in &#8220;\u00dc\u00e7 Kural\u0131&#8221; ve YAGNI gibi prensiplerle birlikte d\u00fc\u015f\u00fcn\u00fclmelidir. En iyi uygulamalar, yaln\u0131zca ger\u00e7ek ve istikrarl\u0131 tekrarlar i\u00e7in soyutlama yapmay\u0131, basit ve anla\u015f\u0131l\u0131r \u00e7\u00f6z\u00fcmleri tercih etmeyi ve SOLID prensipleri gibi di\u011fer tasar\u0131m ilkeleriyle uyumlu \u00e7al\u0131\u015fmay\u0131 gerektirir.<\/p>\n<p>Sonu\u00e7 olarak, DRY prensibi, sadece kod yazma al\u0131\u015fkanl\u0131\u011f\u0131ndan \u00f6te, bir d\u00fc\u015f\u00fcnce bi\u00e7imidir. Geli\u015ftiricilerin s\u00fcrekli olarak kod tabanlar\u0131n\u0131 g\u00f6zden ge\u00e7irmelerini, potansiyel tekrarlar\u0131 tespit etmelerini ve bunlar\u0131 zarif ve esnek soyutlamalarla \u00e7\u00f6zmelerini te\u015fvik eder. Bu s\u00fcrekli \u00e7aba, uzun vadede daha sa\u011flam, daha verimli ve daha ba\u015far\u0131l\u0131 yaz\u0131l\u0131m projelerine yol a\u00e7ar. \u0130yi yaz\u0131l\u0131m, DRY bir yaz\u0131l\u0131md\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, kod kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve y\u00f6netilebilirli\u011fini art\u0131rmak i\u00e7in bir\u00e7ok prensip ve metodoloji ortaya konulmu\u015ftur.","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-40773","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>Kuru Geli\u015ftirme (DRY - Don&#039;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kuru Geli\u015ftirme (DRY - Don&#039;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek\" \/>\n<meta property=\"og:description\" content=\"Kuru Geli\u015ftirme (DRY - Don&#039;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, kod kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve y\u00f6netilebilirli\u011fini art\u0131rmak i\u00e7in bir\u00e7ok prensip ve metodoloji ortaya konulmu\u015ftur.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-01T03:40:40+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=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek\",\"datePublished\":\"2026-03-01T03:40:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\"},\"wordCount\":3130,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\",\"name\":\"Kuru Geli\u015ftirme (DRY - Don't Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-03-01T03:40:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek\"}]},{\"@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":"Kuru Geli\u015ftirme (DRY - Don't Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/","og_locale":"tr_TR","og_type":"article","og_title":"Kuru Geli\u015ftirme (DRY - Don't Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek","og_description":"Kuru Geli\u015ftirme (DRY - Don't Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek Yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda, kod kalitesini, s\u00fcrd\u00fcr\u00fclebilirli\u011fini ve y\u00f6netilebilirli\u011fini art\u0131rmak i\u00e7in bir\u00e7ok prensip ve metodoloji ortaya konulmu\u015ftur.","og_url":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-03-01T03:40:40+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek","datePublished":"2026-03-01T03:40:40+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/"},"wordCount":3130,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/","url":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/","name":"Kuru Geli\u015ftirme (DRY - Don't Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-03-01T03:40:40+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kuru-gelistirme-dry-dont-repeat-yourself-prensibi-yazilimda-tekrari-onlemek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kuru Geli\u015ftirme (DRY &#8211; Don&#8217;t Repeat Yourself) Prensibi: Yaz\u0131l\u0131mda Tekrar\u0131 \u00d6nlemek"}]},{"@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\/40773","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=40773"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40773\/revisions"}],"predecessor-version":[{"id":40774,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40773\/revisions\/40774"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40773"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40773"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40773"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}