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 ö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.
“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
//Controller dosyası - anasayfa.php
$data['sonuclar'] = $this->defter_model->satir($id);
$this->load->view('goster_view',$data);
?>
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.
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…
Genç yaşlarda programlama ile tanıştı ve Delphi ile başladığı programlama macerasına şuanda PHP, SQL, Javascript, AJAX, CSS, XHTML teknolojileri ile devam etmektedir. Elektrik - Elektronik bölümü mezunu olan "yakuter" 2006 yılından itibaren yakuter.com'un yazarlığını yapmaya başlamıştır.
Yiğit Özdamar
28 Eylül 2009
Yine şık ve başarılı bir makale her zamanki gibi. Ellerine sağlık Erhan.
yakuter
28 Eylül 2009
@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 :/
yedincisenol
29 Eylül 2009
Gayet güzel bir konu,güzel bir anlatım. Giriş yapmış olduk. Devamını bekliyoruz; çok teşekkürler.
Fatih BAZMAN
29 Eylül 2009
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.
brsyuksel
29 Eylül 2009
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
yakuter
29 Eylül 2009
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 ;)
Berker Peksağ
30 Eylül 2009
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.
Hülya Aksu
22 Ekim 2009
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.
İrfan KILIÇ
30 Ekim 2009
MVC için güzel bir giriş olmuş. Umarım devamı gelir.
Serkan
10 Kasım 2009
Ufkumuzu açan bir makale olmuş. Çok teşekkürler… Code ile ilgili bilgilerinizi bizlere aktarırsanız sevinirim… Başarılar.
YeG
27 Ocak 2010
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_?
yakuter
28 Ocak 2010
@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.
Tutkun
28 Ocak 2010
Ç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. ;) :)
Yazılan yazılardan ilk siz haberdar olun, yeni yazılar e-postanıza gönderilsin.
menchek
02 Eylül 2010
yakuter.com © 2006-2010 Erhan Yakut. Site tasarım Cenk Akyıldız - (Tema Bilgisi). Hosting sponsoru WebGrup.
Site içerisindeki içerikler izinsiz kopyalanamaz, alıntı yapılamaz.