MVC Nedir? Neden Kullanılır?
MVC bir linkin, bir sınıfın metodu ile ilişkili olduğu web geliştirme frameworküdür. Yani http://kadir.xyz/blog linki kod tarafında blog sınıfının listeleme metodu ile ilişkilidir.
MVC (Model-View-Controller) uygulamanın iş katmanı (business logic) ile kullanıcı arayüzünü (user interface/ui) birbirinden ayıran ve farklı amaçları olan kısımların birbiri ile karışmasını engelleyen bir mimaridir. Ve buna Seperation Of Concern denir. Yani birbirinden alakasız herşey ayrılır.
Model
Veri işlemlerinin ve iş kurallarının olduğu katmandır. Genellikle class'lar şeklinde tutulur (veritabanı tabloları, kolon ve bilgileri, iş kuralları ve doğrulama gibi kurallar). Veri katmanını uygulamadan izole eder.
View
UI'ın kendisidir, yani son kullanıcıya verilerin nasıl gösterileceğinin tanımlandığı katmandır.
Controller
Model ve View arasındaki iletişimi sağlayan katmandır. Controller'a model veya view'in sorumlulukları yüklenmemelidir.
MVC Çalışma Mantığı
Son kullanıcı browser üzerinden (View) istek yaptığında bu istek ilgili controller tarafından karşılanır. Controller ihtiyacı olan model ve bileşenlerini çağırır ve model'den gerekli cevabı bekler. Model'den cevap geldikten sonra bu cevabı tekrar View'a gönderir ve son kullanıcıya yapmış olduğu isteğin cevabını gösterir. Bu mantığı aşağıdaki örnek ile daha iyi anlayabilirsiniz.
Imdb sayfasında gezindiğinizi varsayın. Matrix yazdınız ve arama butonuna bastınız. Bu işlemi yaptığınız yer View. Arama ile ilgili bir controller var. Controller yaptığınız aramayı alıyor ve diyor ki birisi bana bir arama isteğinde bulundu. İlgili anahtar kelimeyi (Matrix) alıyor ve film'ler ile ilgili olan tüm bilgilerin tutulduğu Model ile iletişim kuruyor ve diyorki birisi şu şu kelime ile film arıyor, bana bu film ile ilgili detayları ver. Model ilk olarak film ile ilgili class'a gidiyor. Bu class'ta film bilgileri (başlık, yayınlanma yılı, yapımcı firma, yıl, puan vb.) ile beraber listeleme, arama, silme gibi metodlar bulunur. Model, arama ile ilgili metodunu çalıştırıyor ve veritabanından gelen bilgiyi Controller'a geri iletiyor ve al sana arama yaptığın film ile ilgili tüm detayları veriyorum. Controller Model'den aldığı bilgiyi tekrar View'a aktarıyor ve View'de son kullanıcıya bilgileri göstermiş oluyor.
MVC Avantajları
- Çok katmanlı bir yapı sunar (n-tier), iş katmanı ve kullanıcı arayüzü birbirinden ayrı olduğundan temiz ve okunabilir kod yazmanızı sağlar. Bu nedenle de hem daha hızlı geliştirme yapılır hem de kodların yeniden kullanılmasına olanak sağlanır.
- Arayüz değişiklikleri iş katmanından bağımsız olarak yapılabilir.
- Hata ayıklama daha kolaydır ve TDD (test odaklı geliştirme) olan sunar.
- Routing yapısı sayesinde Seo için avantaj sağlar.