MVC hakkında yapmış olduğum anketten aldığım şevk ile ilk makalemi kaleme almanın zamanının geldiğini düşünüyorum. Fakat bu konuda genel olarak yapılan bir hata var. O da böyle pratikle çözülecek bir konu için sayfalarca yazılar yazılması. Dürüst olmak gerekirse ben gereksiz bilgileri kenarda tutup sizi kısa ama net bir anlatımla direk olaya dahil etmek istiyorum. Onda sonra yapacağımız pratiklerle zaten üzerine katarız ve konuyu daha da pekiştiririz.
MVC Nedir?
MVC öncelikle bir programlama tekniğidir. Amacı ise daha sade ve anlaşılır projeler geliştirmektir. Peki nasıl olur da bir proje daha anlaşılır hale getirilir? MVC mantığı bu sorunun cevabını “projenin farklı işlev gösteren kısımlarını birbirinden ayırarak” şeklinde cevaplar.
Örnek: Bir ziyaretçi defteri uygulamamız var diyelim. Eski mantıkla kodlamak istersek veritabanından ziyaretçilerin mesajlarını çekme işlemleri, gerekli dosyaların ve fonksiyonların çağrılması ve sonuçların ekranda gösterilmesi aynı dosya veya dosyalar içinde dönen bir dizi karışık işlem gibi görülür. MVC ise altyapıda yürütülen faaliyetleri (veritabanı işlemleri vb.), sonuçları ekrana yazdırma işlemlerini ve bunlar arasındaki bağlantıyı birbirinden ayırarak bize büyük kolaylık sağlamktadır.

Resimde gördüğünüz gibi konunun temeli aslında armut ile elmayı birbirinden ayırmak. Diğer bir deyişle yine basit bir şekilde söylemek gerekirse ekrana verileri yazacağımız dosyalar ile bu verilerin elde edilmesini sağlayan dosyaları birbirinden ayırarak kod kalabalığından kurtulmak.
Konuya yeni başlayan arkadaşlar demek hepsi bu kadarmış diyebilir fakat malesef (veya çok şükür) hepsi bu kadar basit ve kısıtlı değil. Günümüzde MVC mantığı ile anaçatıları (CodeIgniter, Zend, CakePHP vb.) ayrılmaz bir bütün olarak gördüğümüz için bu mükemmel bileşimi hesaba katmamız lazım. İşte o zaman karşımıza şöyle bir tablo çıkıyor.

Bu resmi kısaca açıklamak istiyorum. Size şuan oldukça meşhur olan ve PHP programlama dilini kullanan Code Igniter anaçatısının akış şemasını verdim. Gördüğünüz gibi artık olayımızda SEO için URL Yönlendirme (Routing), fazla ziyaretçi alan sitelerin çökmesini engellemek için Önbelleğe Alma (Caching), Güvenlik (Security), Eklentiler (Plugins), Betikler (Scripts), Kütüphaneler (Libraries) ve Yardımcılar (Helpers) gibi oldukça önemli unsurlar bulunuyor. Sakın bu resim gözünüzü korkutmasın, hepsine yavaş yavaş, sindire sindire bakacağız.
Kodlarla MVC
“MVC Nedir?” sorusunu cevaplarken bir anaçatı çerçevesinde (CodeIgniter) konuyu özetlemeye çalıştım. Umarım bu kısa giriş mantık için yeterli olmuştur. Bu durumda “Peki ama nasıl kodlarla uğraşacağız?” sorusu aklınıza gelebilir. O zamanda hemen şu basit örneğimizi gösterelim.
Örnek: Örneğimizde bir adet View (goster_view.php), bir adet Model (defter_model.php) ve bir adet Controller (anasayfa.php) dosyamız bulunuyor. Model dosyamızın veritabanından veri çektiğini ve bu veriyi View dosyasıyla ekrana yazdıracağımızı düşünün. Elbette bu ikisini bağlamak yani aracı görevini yürütmek için de Controller dosyamızı kullanacağız. Sizden isteğim Controller dosyasındaki şu özet kodun sadeliğine dikkat etmeniz. Tüm makaleyi özetlediğini düşünüyorum.
[php]<?php
//Controller dosyası – anasayfa.php
$data[‘sonuclar’] = $this->defter_model->satir($id);
$this->load->view(‘goster_view’,$data);
?>[/php]
Açıklanacak fazla bir şey yok ama yine de kısaca değineyim. Örnekte defter_model.php (Model) dosyasında bulunan satir fonksiyonunu çalıştırıyor ve elde ettiğimiz veriyi goster_view.php (View) dosyasına yönlendirerek ekrana yazdırıyoruz. Tabiî bu işlemi de anasayfa.php (Controller) dosyasında gerçekleştiriyoruz.
Sonuç
Model View Controller (MVC) gördüğünüz gibi biz kod sevdalılarını bir sonraki çağa taşıyacak olan oldukça önemli teknik. Bu mantık özellikle de güçlü bir anaçatı ile desteklendiğinde -ki ben CodeIgniter’dan yanayım- vazgeçilmeyecek ve daha da önemlisi göz ardı edilmeyecek bir gerçek. Bundan sonrası sanırım eğlenceli ve gelişmiş kod nehrinde kendimizi akıntıya bırakmak.
Bir sonraki iskelede görüşmek dileğiyle…
Yine şık ve başarılı bir makale her zamanki gibi. Ellerine sağlık Erhan.
@Yiğit, teşekkür ederim. Şıklıktan ziyade işe yarar umarım. Yeni başlayanlar için ağır bir konu olduğunu düşünüyorum. Bu yüzden de anlatırken uçmamaya, yavaş yavaş ilerlemeye çalışıyorum. Umarım anlaşılıyordur çünkü gerçekten zor böyle konuları anlatmak :/
Gayet güzel bir konu,güzel bir anlatım. Giriş yapmış olduk. Devamını bekliyoruz; çok teşekkürler.
Bu makaleniz ile daha fazla kişinin MVC yapılarına dikkat eder hale geleceğini, OOP ve pattern kullanımının önemini fark edeceğini umuyor, konu üzerine yazacağınız makalelerin devamını diliyorum.
CodeIgniter.gen.tr adresine gösterdiğiniz ilgi için ayrıca teşekkür ederim.
Yanlış anlaşılmasın, ukalalık, kibirlilik olarak görülmesini istemem ama ben bir arkadaşıma MVC’yi anlatırken şöyle anlatmıştım: “Çaycı, çay, bardak var. Sen “Bir koyu/açık-x şekerli/şekersiz çay alayım” diyorsun, çaycı bardağa çayı istediğin şekilde koyup sana sunuyor. Burda View bardak, Controller Çaycı, Model ise çay” :D Biliyorum çok çocuksu duruyor ama arkadaşım çok beğenmişti bu örneğimi :D
Arkadaşlar öncelikle çok teşekkür ederim ilginiz ve desteğiniz için.
@Barış, ayrıca katkın ve güzel örneğin için de teşekkürler ;)
MVC tasarım deseni neredeyse 30 senedir var ama web uygulamalarında henüz yeni yeni popüler olmaya başladı.
Umuyorum yazınız vasitasıyla kullanımı artar.
Teşekkürler,Sizi her zaman takip edeceğim :)
Kod yazılımını bu şekilde iyileştiren ve kolaylaştıran metodlar çok önemli.
Keşke framework’lere gösterilen önemin yarısı bu tip metodlara gösterilse.
çok başarılı bir makale olmuş tebrik ederim
MVC için güzel bir giriş olmuş. Umarım devamı gelir.
Ufkumuzu açan bir makale olmuş. Çok teşekkürler… Code ile ilgili bilgilerinizi bizlere aktarırsanız sevinirim… Başarılar.
Merhaba hocam,
Uzun süredir bilgisayar ile iç içeyim ve programlamayıda kendi çapımda geliştirdim(yorum)..
Önceden aklıma hep geldi bi framework kullanmak ama onu kullanıncada sanki hazıra alışmak gibi oluyor..
Ama kullanmakta gerekli ilk defa başlıcaz sizin bilgilerinizle inşallah..
Şunu merak ediyorum.. Bu frameworklerde birçok dosya var birçok kontrol ..vs.. Bunlar ileride sistemde kasıntı yapmıyormu_?Sunucu yorulmuyormu acaba_?
@YeG, örneğin Codeigniter’ın ayarlarında hangi sınıfları(class) kullanmak istediğini belirttiğin bir satır var. Buradan şunu çıkartabiliriz: Anaçatılarda (framework) bir çok sınıf vardır ama biz istemediğimiz sürece hiçbirini çalıştırmaz, işleme sokmaz. Doğal olarak sistemimizi hızlı kılmak yine bizim elimizde.
Şunu da belirtmek gerekir tabi ki büyük projelerde ne yaparsak yapalım sistem bir miktar da olsa kasılır fakat anaçatı olmadan da kasılacağı malumdur ;) Anaçatının bize kazandırdığı düzen, hız, güvenlik ve işlevsellik de yanımıza kâr kalır.
Çok güzel ve sade bir anlatım. Eminim anlamayan yoktur. :) Bu güzel anlatımınızla nice CodeIgniter derslerinin devamını bekliyoruz sevgili Yakuter. ;) :)
Hocam codeinteger öğrenmeye yeni başladım. Dökümanınız gerçekten çok müthiş elinize klavyenize sağlık. böyle sade anlatımlarınızın devamını bekliyoruz.
Süper bir anlatım Erhan abi :)
Ellerinize sağlık çok faydalı oldu benim için. En azından giriş seviyesi hakkında biraz bilgim oldu. Teşekkürler.