Premium
BA
Makale
Takipçi
Takip

Hakkında

Uzmanlıklar

Eklenmemiş

İletişim

Yazılım 09.12.2025

PHP'de Modern Yazılım Mühendisliği: "Dependency Injection" ile Spagetti Kodu Önlemek

Giriş: Yazılım Sadece Kod Yazmak Değildir Bir inşaat mühendisi için binanın temeli ne kadar önemliyse, bir yazılım mühendisi için de kodun mimarisi o kadar önemlidir. Özellikle PHP gibi esnek dillerde, proje büyüdükçe kodun yönetilemez bir "makarna" (spagetti kod) haline gelmesi işten bile değildir. Bu yazıda, modern PHP mühendisliğinin temel taşlarından biri olan Dependency Injection (Bağımlılık Enjeksiyonu) kavramını ve bunun neden kritik olduğunu inceleyeceğiz. Sorun: Sıkı Bağlı (Tightly Coupled) Yapılar Geleneksel PHP geliştirmelerinde sıkça yapılan hata, sınıfların ihtiyaç duydukları diğer sınıfları kendi içlerinde oluşturmalarıdır. // Hatalı Yaklaşım: Mühendislik açısından sürdürülemez class OrderService { protected $logger; public function __construct() { // Hata burada: DatabaseLogger sınıfına göbekten bağlıyız! $this->logger = new DatabaseLogger(); } public function createOrder($order) { $this->logger->log("Sipariş oluşturuldu."); } } Bu kodun mühendislik açısından kusuru şudur: Eğer yarın logları veritabanına değil de bir dosyaya (FileLogger) yazmak istersek, OrderService sınıfının kaynak kodunu değiştirmek zorunda kalırız. Bu durum, Open/Closed (Gelişime açık, değişime kapalı) prensibine aykırıdır. Çözüm: Dependency Injection (Bağımlılık Enjeksiyonu) Mühendislikte amaç, parçaları modüler hale getirmektir. Bağımlılıkları sınıfın içinde üretmek yerine, dışarıdan enjekte etmeliyiz. // Modern Mühendislik Yaklaşımı interface LoggerInterface { public function log(string $message); } class OrderService { protected $logger; // Bağımlılık dışarıdan (Constructor Injection) geliyor public function __construct(LoggerInterface $logger) { $this->logger = $logger; } public function createOrder($order) { $this->logger->log("Sipariş oluşturuldu."); } } Neden Bu Yöntemi Kullanmalıyız? Test Edilebilirlik: Birim testleri (Unit Tests) yazarken, veritabanına gerçekten bağlanmak yerine sahte (mock) bir loglayıcı servisi enjekte edebilirsiniz. Bakım Kolaylığı: Loglama altyapınızı değiştirmek istediğinizde OrderService sınıfına dokunmanıza gerek kalmaz. Sadece servisi başlatırken verdiğiniz parametreyi değiştirirsiniz. Standartlara Uygunluk: Bu yapı, modern PHP frameworklerinin (Laravel, Symfony) çalışma mantığının temelidir. Sonuç PHP ile "kod yazmak" ve "mühendislik yapmak" arasındaki fark, sürdürülebilirlikte gizlidir. Dependency Injection gibi desenleri (patterns) kullanmak, projenizin sadece bugün çalışmasını değil, yıllar sonra bile geliştirilebilir kalmasını sağlar. Unutmayın, iyi bir mühendis kodun nasıl çalıştığı kadar, nasıl yaşayacağını da tasarlar.

0
3
3 dk
Yazılım 07.12.2025

HowwydSheet Kullanım Rehberi

HowwydSheet HowwydSheet, modern web uygulamaları için geliştirilmiş, Alpine.js tabanlı, esnek, hafif ve özelleştirilebilir bir "bottom sheet" (alt sayfa) ve modal kütüphanesidir. Mobil öncelikli tasarımı ve yumuşak geçişleri ile native uygulama hissi verir. Batuhan ATICI tarafından HOWWYD adına geliştirilmiştir. Özellikler 🚀 Alpine.js Gücü: Alpine.js ekosistemiyle tam uyumlu, reaktif yapı. 📱 Mobil Uyumlu: Dokunmatik sürükleme (drag) hareketlerini ve ivmeyi destekler. 🎨 Tamamen Özelleştirilebilir: Başlangıç yüksekliği, kilitlenebilirlik ve kırılma noktaları ayarlanabilir. 🔒 Kilitlenebilir Mod: Kullanıcının kapatmasını engelleyen (persistent) modlar. ⚡ Yüksek Performans: requestAnimationFrame ile optimize edilmiş animasyonlar. 🌙 Karanlık Mod: Sistem temasını algılar ve uyum sağlar. Kurulum HowwydSheet'i projenize dahil etmenin en hızlı yolu CDN kullanmaktır. CDN Bağlantıları Projenizin etiketleri arasına CSS dosyasını, kapanış etiketinden hemen önce ise JS dosyalarını ekleyin. Not: HowwydSheet, çalışmak için Alpine.js kütüphanesine ihtiyaç duyar. KODU KOPYALA Kullanım HowwydSheet, Alpine.js'in x-data direktifi ile başlatılır. Aşağıda temel bir kullanım örneği verilmiştir. Temel Yapı Sheet'i Aç Merhaba Dünya Bu, Alpine.js ile güçlendirilmiş bir HowwydSheet örneğidir. Kapat KODU KOPYALA Konfigürasyon Seçenekleri howwydSheet fonksiyonuna bir obje olarak aşağıdaki ayarları geçebilirsiniz: Seçenek Tip Varsayılan Açıklama initialSize string | number '50%' Sheet açıldığında kaplayacağı yükseklik (% veya px). minSize string | number '25%' Minimum küçülme boyutu. maxSize string | number '100%' Maksimum büyüme boyutu. lockable boolean false true ise kullanıcı sürükleyerek veya dışarı tıklayarak kapatamaz. fullscreenOnInit boolean false true ise açıldığında doğrudan tam ekran olur. breakpoints object { min: 25, mid: 50, max: 75 } Sürükleme bırakıldığında yapışacağı (snap) noktalar. Örnek Konfigürasyon ... KODU KOPYALA Metodlar ve Değişkenler Bileşen scope'u içinde kullanabileceğiniz özellikler: show(): Sheet'i açar. hide(force = false): Sheet'i kapatır. lockable true ise force parametresi true olmalıdır. toggle(): Açık/Kapalı durumunu değiştirir. isVisible: Sheet'in görünürlük durumu (boolean). isFull: Sheet'in tam ekran olup olmadığı (boolean). Geliştirme ve Katkı Projeyi yerel ortamınızda geliştirmek için: Depoyu klonlayın:git clone https://github.com/batuhanatici/howwydsheet.git KODU KOPYALA Bağımlılıkları yükleyin:npm install KODU KOPYALA Geliştirme sunucusunu başlatın (Tailwind vb. için):npm run dev KODU KOPYALA Lisans Bu proje MIT Lisansı ile lisanslanmıştır. Copyright (c) 2025 HOWWYD (Created by Batuhan ATICI)

0
3
3 dk