Tek başına da çalışan, birlikte de çalışan PHP paketleri
Framework'e bağlanmadan çalışan modüler PHP kütüphaneleri; 39 paketlik InitPHP ekosistemine ve Framework3'e dönüştü.
Şu an ne yapıyor
39 paketlik bir PHP kütüphane ailesi: Router, Database, Cache, Mailer, Socket ve diğerleri hem tek başına hem birlikte çalışıyor, hepsi Composer/Packagist üzerinden MIT lisansıyla dağıtılıyor. Framework'e bağlanmadan parça kullanmak isteyen PHP geliştiricisi bugün kurabilir.
- Başlangıç
- Ocak 2021 — Ağustos 2022
- Labs’tan çıkış
Tür
Teknolojiler
Bu iş ürüne dönüştü:
InitPHPBir PHP paketi ya bir çatının parçasıdır ya da tek başına duran bir araç. İkisini birden isteyince ortak bir çekirdek paket yazmak ilk akla gelen çözüm — ve yanlış olan da o.
Tek başına mı, aile mi
Denenen şey şuydu: Router, Database, Cache, Mailer, Socket gibi parçalar hem tek başına kurulduğunda anlamlı çalışsın, hem aynı ailedeki diğer paketlerle birleştiğinde bir çatı oluştursun. Parçalar ayrı ayrı yazıldı ve her biri kendi başına bir soruya cevap verdi.
39 paket ve üstündeki çatı
39 bağımsız paket ve bunların üzerine oturan minimalist bir MVC çatısı (Framework3). Ortak zemin tip güvenliği ve PHPUnit testleri; dağıtım Composer/Packagist üzerinden, lisans MIT.
Ortak çekirdek yerine PSR
“Hem tek başına hem birlikte” isteği tek bir noktada çatışıyor: paketler birbirini tanımak zorundaysa aralarında bir bağımlılık var demektir ve o bağımlılık tek başına kurulumu bozar.
İlk akla gelen çözüm ortak bir çekirdek paket yazmaktı — initphp/core gibi
bir şey, arayüzleri ve ortak yardımcıları taşısın. O yol iki şeyi birden
getirirdi: her paket bir bağımlılık daha kazanırdı ve ailenin dışındaki hiçbir
kütüphane bu çekirdeği tanımayacağı için aile kendi içine kapanırdı.
Seçilen zemin PHP-FIG standartları oldu. Logger PSR-3, Container PSR-11 uyguluyor; paketler birbirini değil, ortak bir arayüz sözleşmesini tanıyor. Bunun karşılığı şu: InitPHP Container’ı InitPHP Logger’ı kabul ediyor ama Monolog’u da kabul ediyor ve InitPHP Logger başka birinin PSR-11 container’ına da takılıyor. Çelişkiyi çözen şey ailenin kendi çekirdeği değil, ailenin dışında zaten var olan bir sözleşmeydi.
Tek kütüphane yerine otuz dokuz paket
Ailenin ikinci kararı paketlemede. Otuz dokuz ayrı depo, otuz dokuz sürüm
hattı ve otuz dokuz Packagist kaydı yerine tek bir initphp/initphp paketi
yazmak bakımı belirgin biçimde ucuzlatırdı.
Bedeli kullanıcıya yazılırdı. Yalnız bir Router isteyen proje, Socket sunucusunu,
Mailer’ı ve Queue’yu da kurmak zorunda kalırdı; her sürüm yükseltmesi
kullanmadığı on paketin değişikliğini de taşırdı. Ayrılmanın karşılığı şu:
composer require initphp/router yalnız Router’ı getiriyor, Socket
kütüphanesinin TCP/TLS/UDP/SSL yüzeyini hiç görmüyorsunuz.
Sürdürülebilirliği ayakta tutan şey de bu yüzden ortak kod değil, ortak disiplin: her pakette aynı tip güvenliği seviyesi, aynı PHPUnit alışkanlığı ve aynı PSR uyumu. Aile bir arada duruyor; aynı bağımlılığı paylaştığı için değil, aynı kurallarla yazıldığı için.
Ekosisteme giden yol
Koleksiyon dağınık paketler olmaktan çıkıp bakımı süren bir açık kaynak ekosistemine döndü. Ayrıntısı portfolyoda.