Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Global State'ten Kurtulayım Derken, Factory Üreten Factory Yapan Canavarla Karşılaştım!

✖ Kapat
Duyuru
✖ Kapat
Duyuru

codexor

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
62
🔥 İyi Niyet, Berbat Sonuç

Kafayı global state'le bozmuştum arkadaş. Her yerde singleton'lar, her yerde statik çağrılar. Test yazmak imkansız, bağımlılık izi sürülmüyor. "Yeter!" dedim, kolları sıvadım. Temiz, test edilebilir kod için dependency injection'a sarılacaktım. Meğer kendimi nasıl bir çukura attığımı bilmiyormuşum.

🛠️ Basit Başlangıç: "Bir Factory İş Görür"

İlk hedefim, veritabanı bağlantılarını yönetmekti. Direkt new Database() dağıtmak yerine, bir DatabaseFactory yazdım. Güzel, temiz. Sonra cache layer için CacheFactory geldi. Onun da config'e ihtiyacı vardı, o ayrı bir factory'den gelsin.

Derken, bu factory'lerin kendileri de başka servislere bağımlı hale geldi. Ana servisim, hem database factory'sine, hem cache factory'sine, hem de logger factory'sine ihtiyaç duyuyordu. Her biri ayrı ayrı inject edilmeliydi. Constructor'ımın imzası kabarmaya başladı:

Java:
public AnaServis(DatabaseFactory dbFactory, CacheFactory cacheFactory, LoggerFactory loggerFactory, ConfigFactory configFactory, HttpClientFactory clientFactory) { ... }

🤖 Canavarın Doğuşu: "FactoryProviderFactory"

İşte o an geldi. "Ya, ben bunları üst seviyede bir kere oluşturup, onları üreten merkezi bir şey yapsam?" dedim. Ve FactoryProvider diye bir sınıf yarattım. Bu provider, tüm factory örneklerini tutacak ve dağıtacaktı.

Ama sonra düşündüm, bu provider'ın kendisi de farklı senaryolara göre (test, production) farklı factory'ler sağlamalıydı. Ve böylece, FactoryProviderFactory doğdu. Şaka gibi ama, gerçek oldu.

💡 Uyanış ve Geri Çekilme

Bir gün debug ederken, basit bir servis instance'ı oluşturmak için call stack'te 12 katman geçtiğimi gördüm. Her şey bir factory'nin içinden çıkıyor, ama hiçbir şey basit değildi. Amacım karmaşıklığı azaltmaktı, ama kendi yarattığım soyutlama cehenneminde kaybolmuştum.

Çözüm, her şeyi tek bir "sihirli" factory'ye bağlamak değilmiş. Bazen, kontrollü miktarda manual injection veya sadece new kullanmak daha okunabilir oluyormuş. Veya hafif bir DI konteyner kütüphanesi (Spring veya benzeri hafif bir şey) kullanmak, bu kendi kendime yaptığım "framework"ten katbekat iyiymiş.

Siz de "temiz kod" uğruna, kodu anlaşılmaz bir labirente dönüştürdüğünüz oldu mu? Bu factory çılgınlığından nasıl kurtuldunuz? Basitlik ile esneklik arasındaki o ince çizgiyi nasıl buluyorsunuz?
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri