Geliştiricinin Yıkma İhtiyacı
Her kıdemli geliştirici zamanla bir miras kod tabanı ile karşılaşır. Bu kod, devasa 2,000 satırlık controllerlar, tekrarlanan iş mantıkları ve sıkı şekilde bağlı veritabanı sorgularıyla doludur. Yeni bir özellik eklemeye çalıştığınızda, genellikle üç eski özellik bozulur.
Hızla gelen tepki genellikle: “Bu sürdürülebilir değil. Tüm yeni özellikleri durdurmalıyız ve uygulamayı baştan yazmalıyız.”
Bir Lead Architect olarak kesin olarak söyleyebilirim ki: üretim ortamındaki bir uygulamayı sıfırdan yeniden yazmak, bir şirketin alabileceği en tehlikeli iş kararlarından biridir. Bu, ilerlemenizi durdurur, kullanıcılarınızı sinirlendirir ve neredeyse her zaman tahmin edilenden üç kat daha uzun sürer.
Refaktoringi Planlamak: Strangler Fig Pattern
Massif bir yeniden yazım yerine, kurumsal ekipler Strangler Fig Pattern adında bir strateji kullanır. (Bir ağacın çevresinde yavaşça büyüyen bir sarmaşık adının verilmesinden esinlenilmiştir.).
Eski kodu bir kenara atmazsınız. Yavaş yavaş izole eder ve parçalar halinde değiştirirsiniz. Uygulama canlı ve kârlı kalırken bu işlemi gerçekleştirirsiniz.
Adım 1: API Sınırı
İlk adım, karmaşaya yeni katkılar sağlamayı durdurmaktır. Her yeni özellik, modern mimariye (örneğin, özel Service sınıfları veya Laravel’deki Actions) uygun olarak inşa edilir. “Eski Dünya” ile “Yeni Dünya” arasında net bir sınır oluşturursunuz.
Adım 2: İş Mantığını Çıkarmak
Sonra, miras kodunun en sorunlu ve sık değişen kısmını bulursunuz; örneğin, faturalama mantığı. Bunu devasa controller’dan çıkararak, özel ve test edilebilir bir sınıfa sararsınız.
// Legacy Code (Inside a giant 1000-line controller)
// if ($user->plan == 'pro' && $user->credits > 0) { ... charge card, send email, update db ... }
// New Architecture (Isolated Action Class)
namespace App\Actions\Billing;
class ProcessMonthlySubscription
{
public function execute(User $user)
{
// 1. Temiz, izole mantık
// 2. Tamamen birim testleri yapılmış
// 3. Controllerlar, CLI komutları ve kuyruklu işleri arasında yeniden kullanılabilir
}
}
Adım 3: Değiştir ve Sil
Yeni ProcessMonthlySubscription sınıfı otomatik testlerle tamamen kaplandığında, bunu eski controller’a entegre edersiniz. Miras kod silinir. Bir monolitin bir parçasını başarılı bir şekilde strangledın.
Sonuç
Refaktoring, mükemmel kod yazmak için işin durdurulmasıyla ilgili değildir. Teknik borcun cerrahi olarak uzaklaştırılmasıyla ilgilidir. Strangler Fig pattern’ini benimseyin, iş mantığınızı service sınıflarına ayırın ve kod tabanınızı yavaşça geri kazanın.
Kaynak: Orijinal Makale


