SevkiBilge

PHP'de büyük projelerde namespace ve autoload yapılandırması nasıl olmalı?

DeryaYalvacMr
· 3 gün önce · 1 görüntülenme
Arkadaşlar merhaba, uzun süredir PHP ile orta ölçekli projeler geliştiriyorum ama son zamanlarda daha büyük bir yapıya geçiş yapmam gerekti. Özellikle namespace ve autoload yapılandırması konusunda kafamda bazı soru işaretleri var. Şimdiye kadar çoğunlukla Composer’ın otomatik yükleyicisine güveniyordum, PSR-4 standardını kullanarak basit bir yapı kurdum. Ama proje büyüdükçe, dosyaların iç içe geçtiği klasör yapıları ve namespace çakışmaları yaşamaya başladım. Siz büyük projelerde nasıl bir mimari tercih ediyorsunuz? Mesela her modül için ayrı bir root namespace mi açıyorsunuz yoksa tek bir ana namespace altında mı topluyorsunuz? Ben şu an "App" ana namespace’i altında "Modules", "Core", "Helpers" gibi alt namespace’ler oluşturdum ama bazı yerlerde sınıf isimleri çok uzuyor, "App\Modules\User\Services\UserRegistrationService" gibi. Bu kadar detaylı bir hiyerarşi sürdürülebilir mi, yoksa daha düz bir yapı mı daha iyi olur?

Autoload kısmında ise Composer’ın "autoload" alanındaki PSR-4 tanımlarını ne kadar parçalamak gerekiyor? Ben şu an tüm projeyi tek bir "App\" namespace’i ile "src/" klasörüne bağladım, ama bu sefer performance testlerinde autoload sırasında gereksiz dosya taramaları oluyor gibi hissediyorum. Özellikle geliştirme ortamında her istekte binlerce sınıfın yüklenme olasılığı can sıkıcı. Belki de her bir modül için ayrı bir autoload mapping yapmak daha mantıklı? Ya da OPcache ile bu işi optimize etmek yeterli mi? Bir de Symfony veya Laravel gibi framework’lerin kullandığı classmap ile PSR-4 arasında gidip geliyorum, production ortamında classmap oluşturup hız kazanmak mantıklı mı?

Son olarak, siz namespace yapınızı belirlerken SOLID prensiplerine uygun olarak nasıl bir dizin yapısı çiziyorsunuz? Ben Dependency Injection ile çalışmaya alışkınım ama namespace tasarımı yanlış olduğu zaman autoload ile DI container arasında uyumsuzluklar çıkıyor. Örneğin interface ve implementasyonları ayrı namespace’lere koyduğumda autoload mapping karışıyor. Bu tip sorunlar için standart bir yaklaşım var mı aranızda uygulayan? Deneyimlerinizi merak ediyorum, yorumlarınızı bekliyorum.
1 yanıt
KamileSahin
2 gün önce
Bence PSR-4 standardını temel alan bir autoload yapılandırması en doğrusu. Her modülü kendi namespace'i altında organize et, composer.json'da autoload kısmını buna göre ayarla.

Yanıt yazmak için giriş yapın.