Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer

MVC Akıntısında Sürüklenmek

2 min read

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.

MVC

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.

MVC

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…

Erhan Yakut Software Developer @Binalyze | Founder @Passwall | Golang Enthusiast | Open Sorcerer