İletişim

Framework (Yazılım Çatısı) Nedir?

Kısa tanım

Framework (yazılım çatısı), bir uygulamanın iskeletini, çalışma akışını ve kurallarını hazır olarak sunan, geliştiricinin kendi kodunu bu iskeletteki belirli noktalara yerleştirdiği yeniden kullanılabilir yazılım altyapısıdır. Bir kütüphaneyi kodunuz çağırır; framework ise sizin kodunuzu kendisi çağırır. Bu ilkeye kontrolün tersine çevrilmesi (inversion of control) denir. Laravel, Django, Spring ve Next.js yaygın örneklerdir.

Diğer adları: yazılım çatısı, web framework, kütüphane, library, uygulama çatısı

Yönlendirme, ORM, kimlik doğrulama ve şablon gibi hazır parçaları sunan ve geliştiricinin kodunu kendi yapısı içinde çağıran yazılım çatısı

Kütüphaneyi siz çağırırsınız, framework sizi çağırır

Framework ile kütüphane arasındaki farkı anlamanın en kısa yolu, kontrolün kimde olduğuna bakmaktır. Bir kütüphane, ihtiyaç duyduğunuz anda çağırdığınız bir araç kutusudur; programın akışını siz yönetirsiniz. Framework'te ise akışı framework yönetir: isteği karşılar, yönlendirir, sizin yazdığınız parçayı uygun anda çağırır ve sonucu kullanıcıya iletir.

// Kütüphane: tarih biçimlendirmek için siz çağırırsınız
import { format } from "date-fns";
const metin = format(new Date(), "dd.MM.yyyy");

// Framework: Next.js'te bu dosyayı framework bulur ve
// /hakkimizda adresine istek geldiğinde kendisi çalıştırır
// app/hakkimizda/page.tsx
export default function Hakkimizda() {
  return <h1>Hakkımızda</h1>;
}

İkinci örnekte fonksiyonu hiçbir yerde çağırmıyorsunuz. Dosyanın nerede durduğu ve neyi dışa aktardığı, framework'ün onu ne zaman çalıştıracağını belirliyor.

Kontrolün tersine çevrilmesi pratikte

Bu ilke (inversion of control) “bizi aramayın, biz sizi ararız” diye de özetlenir. Framework'lerde birkaç tanıdık biçimde karşımıza çıkar:

  • Kurala dayalı yönlendirme: Dosya adı veya rota tanımı, hangi kodun hangi adres için çalışacağını belirler.
  • Yaşam döngüsü kancaları: Bir bileşen ekrana geldiğinde, bir kayıt kaydedilmeden önce veya bir istek bittikten sonra çalışacak kodu siz yazarsınız; ne zaman çalışacağına framework karar verir.
  • Bağımlılık enjeksiyonu (dependency injection): Bir sınıfın ihtiyaç duyduğu veritabanı bağlantısı veya e-posta servisi, sınıfın kendisi tarafından oluşturulmaz; framework tarafından verilir. Bu, test yazmayı ve parçaları değiştirmeyi kolaylaştırır.
  • Ara katmanlar (middleware): Kimlik doğrulama, loglama veya CSRF koruması gibi işler her isteğin önüne zincir olarak eklenir.

Web'de framework türleri

TürNe yapar?Örnekler
Backend frameworkHTTP isteklerini, veritabanı erişimini, oturumları ve güvenliği yönetirLaravel, Django, Ruby on Rails, Spring, Express
Frontend frameworkTarayıcıda arayüzü ve durumu yönetirAngular, Vue, Svelte
Meta-frameworkBir arayüz kütüphanesinin üzerine yönlendirme, sunucu tarafı render ve derleme eklerNext.js, Nuxt, SvelteKit
CSS frameworkHazır stil kuralları ve yardımcı sınıflar sunarBootstrap, Tailwind CSS

Sınırlar her zaman keskin değildir. React kendini resmî olarak kullanıcı arayüzleri için bir kütüphane olarak tanımlar; yönlendirme ve sunucu tarafı render gibi ihtiyaçlar için genellikle Next.js gibi bir framework ile kullanılır. Vue ise kendini “aşamalı framework” olarak sunar; yalnızca bir sayfanın bir parçasında da, tüm uygulamanın çatısı olarak da kullanılabilir. Express gibi minimal framework'ler ise çok az kural koyup çoğu kararı geliştiriciye bırakır.

Ne kazandırır, ne kaybettirir?

Framework, her projede yeniden yazılacak işleri (yönlendirme, form doğrulama, oturum yönetimi, veritabanı erişimi) hazır getirir ve ekibe ortak bir dil verir: bir Laravel geliştiricisi başka bir Laravel projesinde nereye bakacağını bilir. Olgun framework'ler XSS'e karşı çıktı kaçışlama ve CSRF koruması gibi güvenlik varsayılanlarıyla gelir.

Bedeli de vardır. Framework'ün kuralları dışına çıkmak zorlaşır; büyük sürüm geçişleri ciddi emek ister ve ertelenirse teknik borca dönüşür. Framework ve eklentileri projeye uzun bir bağımlılık zinciri getirir. Soyutlamalar da her zaman sızdırmaz değildir: performans sorunlarını çözmek için çoğu zaman framework'ün altında ne olduğunu bilmek gerekir.

Seçerken sorulacak sorular

  • Ekip bu framework'ü ve dilini biliyor mu, gerekirse yeni geliştirici bulunabiliyor mu?
  • Uzun süreli destek (LTS) sürümleri ve güvenlik güncellemesi politikası var mı?
  • Projenin ihtiyacı neyi gerektiriyor: içerik ağırlıklı bir site mi, yoğun etkileşimli bir panel mi, API mi?
  • Barındırma ortamı framework'ün gerektirdiği çalışma zamanını destekliyor mu?
  • Topluluk ve eklenti ekosistemi, ihtiyaç duyacağınız entegrasyonları karşılıyor mu?

Bir framework'e değil bir servise bağlanmak için hazır araçlar arıyorsanız, aradığınız şey muhtemelen bir SDK'dır.

İlgili terimler

← Sözlüğe dön