MVC Yapısı !

TreXiaNos
26-05-2009, 10:54   |  #1  
OP Üye
Teşekkür Sayısı: 0
85 mesaj
Kayıt Tarihi:Kayıt: May 2009

Merhabalar. Bu makaleyi Chip Okurları ve Webmaster Adaylarını Bilgilendirmek Adına Yayınlıyorum. MVC yani Model View Controller'i Elimden Geldiğince Detaylı Anlatım Olarak Sizlere Sunuyorum. Evet Gelelim Konumuzu Detaylı Anlatmaya..

Başlarken
MVC (ModelViewController)
herhangi bir PHP yazılımcısının olmazsa olmazları
arasında bulunması
gereken kodlama biçimidir. http://en.wikipedia.org/wiki/Modelviewcontroller
adresi MVC'yi teorik
olarak kavramak için iyi bir başlangıç olacaktır. Ancak biz işin pratiğine odaklanacağız ve kendimize
ait oldukça basit bir framework yaratacağız. Burada söz konusu olacak kod ve terimleri anlamak için
PHP5 ve OOP konusunda yeterli bilgiye sahip olmanız gerekmektedir.
Nedir bu M?, V? ve C?
M (Model)
M (Model), İş Mantığı (BusinessLogic)
1 ve data işleme süreçlerini yürütür. C (Controller) tarafından
gönderilen emirlere göre hareket eder. Bilgi işleme sürecinden sonra datayı C'ye, diğer modellere veya
doğrudan V (View)'ye gönderir.
V (View)
V (View) son kullanıcıya gösterilecek olan datanın sunumu ile ilgilenir. V, bu bilgiyi C veya M'den alır,
aynı zamanda son kullanıcıdan gelen talepleri C'ye iletir.
C (Controller)
C ise sistemin ana kısmıdır. Gelen talepleri kontrol eder ve sistemin diğer elemanlarının (M,V) bilgiyi
uygun şekilde alıp, göndermelerini sağlar.
Kısacası, C beynimiz, M sinirlerimiz, V ise kas, burun, göz, kulak vb. kısacası dış dünya ile fiziksel
ilişkisi olan herşeyimizdir.
Sevdiğimiz insanı gördüğümüzde gözümüz bu veriyi beyinimize yollar (V >
C), beynimiz buna bir
tepki vererek yüz sinirlerine emir gönderir (C >
M), sinirlerimiz beyinden gelen emri işleyerek kasları
gerer ve gülümsememizi sağlarlar (M >
V). Tüm MVC süreci bununla özetlenebilir.
Şimdi sıra dünyanın en basit framework'ünü yazmaya geldi. Bu basit framework'te kullanıcıdan
geldiğini varsaydığımız bir datayı güvenlik şemasından geçirerek ekrana basacağız. Böylece bir MVC
framework'ünün nasıl işlediğine dair en basit ve temel bilgiyi edinmiş olacağız. İşe klasör yapımızdan
başlayacağız ve belki serinin devam eden yazılarında bu framework yapısını birlikte geliştireceğiz.
1 İş Mantığı bir veritabanı ve kullanıcı arayüzü arasında gerçekleşen bilgi değiş tokuşunu yöneten fonksiyonel
algoritamları temsil eder. (Kaynak: Wikipedia)
FrameWork
Adlandırma
Yazıya uygun şekilde klasorlerimizi de “m”, “v” ve “c” şeklinde adlandırmak en iyisi olacaktır. Bu
klasörlerle birlikte index.php dosyamızıda sistemimize ekleyeceğiz

index.php
Şimdi her birinin içerisine klasör adları ile ana PHP dosyalarını yükleyelim. “m” altına m.php, “v”
altına v.php ve “c” altına c.php
ve index.php içerisine Model, View ve Controller ana dosyalarını yükleyelim:
<?php
require_once("m/m.php");
require_once("v/v.php");
require_once("c/c.php");
?>
Varsayalım kullanıcı id sini index.php dosyamızda bir form aracılığıyla gönderen kullanıcılarımız var
ve biz bunu veritabanımızda işleterek oturum açıyoruz ve örneğimiz basit olsun diye bu datanın sadece
numaralardan oluştuğunu ve form yazımını işe karıştırmamak için datanın post edilmiş olduğunu
varsayacağız.
<?php
require_once("m/m.php");
require_once("v/v.php");
require_once("c/c.php");
$id = '123456789'; // Normal Kullanıcıdan gelen post değeri.
$id = 'delete * from'; // Sisteme Saldıran Kullanıcıdan gelen post değeri.
?>
Bu dataları alt alta yazdım ancak ayrı ayrı varsayalım. Yani sistemi test ederken birinden birini kaldırın.
index.php dosyamıza daha sonra dönüş yapacağız ama önce Controller dosyamızı oluşturmaya
başlayalım.
c/c.php
Controller sınıf dosyamız, daha önce bahsettiğimiz gibi datayı işleyen değil Model'e datayı işlemesini
emreden dosyamız olacak. Bunun için yine örneğe uygun devam ederek “c” adlı bir sınıf yaratalım:
<?php
class c {
}
Böylece c sınıfını yaratmış olduk. Ek bilgi olarak sınıf dosyamızı kapatmadığımı farketmişsinizdir. Bu
PHP ve Zend Engine geliştiricileri tarafından dosya sonunda boş satırlar oluşmasını engellemek için
include edilen dosyalar için önerilir.
Şimdi sınıfımıza M'ye emir verecek bir fonksiyon eklememiz gerekiyor:
<?php
class c {
public function kullaniciya_guveniyormuyuz($id) {
}
}
Şimdi de ilk emrimizi verelim. Bunu yaparken m.php içerisindeki sınıfa “m” adını vereceğimizi
varsayalım:

<?php
class c {
public function kullaniciya_guveniyormuyuz($id) {
$m = new m();
$cevap = $m->cevabi_soyle($id);
}
}
Böylece M'ye emrimizi verdik. M değeri $id üzerinde işlem yapacak, bir sonuç çıkaracak ve
kullanıcıya güvenilip, güvenilmeyeceğini tespit edecektir. Daha sonra c.php dosyamıza döneceğiz.
Şimdi m.php dosyamızı hazırlamaya başlayalım ve C'nin gönderdiği emri işleyelim.

m/m.php
<?php
class m {
public function cevabi_soyle($id) {
if (is_numeric($id)) {
$cevap = "Evet kullanıcı güvenilir. Oturum açalım";
} else {
$cevap = "Sakın oturum açma, kullanıcı güvenilir değil";
} return $
cevap;
}
}
Yukarıda C'nin emri üzerine kullanıcının girdiği id'nin numerik olup olmadığını kontrol ettik ve eğer
numerik ise kullanıcıya güvenip, oturup açmayı, değilse işlemi yapmamayı söyledik. Tabi gerçek bir
projede buralarda oturum, veritabanı işlemleri ve hata komutları verdiğimizi varsaymalısınız. Şimdi
c.php dosyamıza geri dönelim ve M'nin bize verdiği cevabı değerlendirelim.

c/c.php
<?php
class c {
public function kullaniciya_guveniyormuyuz($id) {
$m = new m();
$cevap = $m->cevabi_soyle($id);
$v = new v();
$v->cevabi_goster($cevap);
$v->goster();
}
}

Görüldüğü gibi şimdi de V'ye M'den gelen sonucu basma emri veriyoruz.
Son olarak V (View) dosyamızı yaratma zamanı geldi. Yukarıda v.php içerisinde oluşturacağımız
gösterme sınıfının adını “v” varsaydık.

v/v.php
<?php
class v {
private $id;
public function goster() {
echo $this->cevap;
} public function cevabi_goster($cevap) {
$this->cevap = $cevap;
}
}
v adlı sınıfımızı oluşturduk ve M'den C'ye dönen cevabı bastık.
Geriye kalan tek şey index.php içerisinde Controller dosyasını çalıştırmak:
index.php
<?php
require_once("m/m.php");
require_once("v/v.php");
require_once("c/c.php");
$id = '123456789'; // Normal Kullanıcı.
$id = 'delete * from'; // Sisteme Saldıran Kullanıcı.
$c = new c();
$c->kullaniciya_guveniyormuyuz($id);
?>
Artık mini MVC framework'umuzu bitirdik, test edelim:
$id = '123456789';
için sonuç:
Evet kullanıcı güvenilir. Oturum açalım
$id = 'delete * from';
için sonuç:
Sakın oturum açma, kullanıcı güvenilir değil
Sanırım oldukça anlaşılır bir şekilde MVC yapısını inceledik. Fırsat oldukça MVC yapısını incelemeye
ve değerli Chip kullanıcılarına anlatmaya devam edeceğim. Sevgili Okurlar, Eğer sorularnız olursa başlık altında yazabilirsiniz. Elimden Geldiğince Yardımcı Olmaya Çalışırım.

PcMaKeR
26-05-2009, 11:20   |  #2  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

Bana kalırsa en iyi MVC algoritması ASP.NET tedir.


İkinci ise Java Server Pages: JSP

sonuncu PHP geliyor. Avantaj olarak en rahat ve kullanışlılık ASP.NET indir.

Yukardakiler benim düşüncem.

TreXiaNos
26-05-2009, 11:26   |  #3  
OP Üye
Teşekkür Sayısı: 0
85 mesaj
Kayıt Tarihi:Kayıt: May 2009

Tabiki ancak Php konusunda çalışmalar yapan birinin Asp.Net alanına yönelmesi o işi öğrenmesi açısından yaklaşık 2 yılına mal olur. Türkiyede genelde hazır sistemler üzerinde oynama yapabilen webmasterler bulunmaktadır. Tam anlamı ile Coder yada Webyazılımcı bulunmuyor. Ben php alanı için yazdım MVC'yi Asp İçinde Mevcut Asp.Net İçinde herkezin alanına göre yazmak gerekiyor. Sonuçta bir insan Php konusunda uzman ise Asp'de uzman değildir. Ama Asp.Net gerçekten çok emek isteyen bir webprogramlama dilidir.
Şahsım adına yeni başlıyacak olanlara Asp den başlamalarını öneririm en azından temeli kavradıklarında Asp.Net'e geçiş yaptıklarında hiç zorluk çekmezler. Herşey temelde yatar.

Sakın senin yazdıklarına karşı birşey yazdım sanma kesinlikle yazdıkların güzel çünki şuanda en popüler webprogramala dili asp.net tir. Paylaşıma katkıda bulunduğun için teşekkürlerimi sunarım.

PcMaKeR
26-05-2009, 11:32   |  #4  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

Yok yanlış anlamam. php ye 1.5 - 2 sene döktüm baktım sevemedim bir türlü. ASP.NET te daha güçlü algoritma ve kurumsal bireysel daha hızlı iş yapıldığı için oraya yöneldim birde C# ile VB.NET i iyi bildiğimden.

ASP.NET Windows programlamaya benziyor. O yüzden benim için cezbedici. .NET 4.0 ile asp.net baya bir canlanmış php de olan kolaylıkları daha da kolaylaştırıp daha da hızlı hale getirmişler.

Dediğin gibi hazırcı webmaster çok bizde ama hazır olan şey iyi olmaz. yarın birgün biri çıkar ufak bir açıktan siteni çökertir uğraş sonra. artı asp.net dll tabanlı olduğu için kodlarım en azından meraklı insanlar tarafından çalınamıyor çalınsa bile çalıştıramıyorlar ;)

bak mesela sen function ve class hazırlamışsın güzel birşey birde son çıkan php sürümünü tam kavrarsan onda namespace lerde başlamış (php yi hala takip ediyorum :) unutmamak gerekir) daha güçlü ve daha rahat site yapmak elinde;) herkezin kendi tercihi. Başarılar dilerim.

Son Düzenleme: PcMaKeR ~ 26 Mayıs 2009 11:34
TreXiaNos
26-05-2009, 11:40   |  #5  
OP Üye
Teşekkür Sayısı: 0
85 mesaj
Kayıt Tarihi:Kayıt: May 2009

Tabiki çok haklısın ne olursa olsun Html sHtml xHtml bunları dahil takip ediyorum ben çünki ara verirsen gerçekten geri kalıyorsun hergün yedi bir kod yeni bir programlama dili çıkıyor neredeyse çok zaman ayırmak gerekiyor. Ancak php'de uzman olan birisi Asp.net'e gerek kalmadan yapabilir bazı şeyleri örnek olarak Facebook gibi bir site Asp.Net'te çok çok büyük bir uzman tarafından kodlanması gerekiyor. şuanda düşünüyorumda Facebookun Asp.Nette kodlanmış halini bence müthiş olurdu ama onu yapabilicek webmasterde pek yok bizde :)
Bende başarılar dilerim arkadaşım yardımcı olabileceğim bir konu olursa elimden geldiğince seve seve ederim paylaşıma ve bilgiye açık birisiyim.

PcMaKeR
26-05-2009, 11:44   |  #6  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

teşekkür ederim.

Facebook basit birşey bana göre. bir ayda temeli tamamen asp.netle oturturum. Ama ona ayıracak zamanım olmuyor çalıştığım şirkette sabahtan akşama win32 ve asp.net proje yapınca zor oluyor işin.

TreXiaNos
26-05-2009, 11:46   |  #7  
OP Üye
Teşekkür Sayısı: 0
85 mesaj
Kayıt Tarihi:Kayıt: May 2009

Yok yav Facebook çok kapsamlı bir site okadar geniş özellik tek bir seferde oturmaz ki çok yakından tanıdığım bir Webtasarım şirketinin Webmasteri kodlamaya kalktığı halde Php şekilde bile 20 günde bitiremedi. Okadar geniş özellikler var Cep telefonuna onay kodundan tut videoları paylaşma ortak arkadaşları tanıtma arkadaş önerisi birçok online oyun ek özellikler yani say say bitmez zaten hergün bir özellik eklendiği için şuanda aynısını kopyalamaları çok zaman alır ama yapılamaz değil tabiki :) biz Türkler herşeyi yapabiliriz bi tek uzaya çıkamayız (:

PcMaKeR
26-05-2009, 11:57   |  #8  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

TreXiaNos karşındaki kişinin yapıp yapamayacağını sorgulama yada yapamazsın gibi düşünce belirtme kardeşim. Ummadığın taş baş yarar :) Taş çatlasa geceli gündüzlü bir ayımı alır(günde işim olmasa 10 - 15 saatte). O adamlar sırf ona çalışıyor çünkü.

TreXiaNos
26-05-2009, 12:05   |  #9  
OP Üye
Teşekkür Sayısı: 0
85 mesaj
Kayıt Tarihi:Kayıt: May 2009

Neyse tartışmaya girmek istemem 10 15 saate facebook sistemi yapacak bir Webmaster tanımıyorum ben Türkiyede ama siz yaparsanız tebrik ederiz. Birde Yaşım 26 Kardeşim Diye hitap etmezseniz sevinirim iyi günler.

PcMaKeR
26-05-2009, 12:16   |  #10  
PcMaKeR avatarı
Yıllanmış Üye
Teşekkür Sayısı: 6
8,935 mesaj
Kayıt Tarihi:Kayıt: Eki 2005

Ben webmaster değilim Programcıyım. Webmaster dediğin kişi sadece web alanıyla uzmanlaşır... Facebookta yada orkut gibi sitelerin temeli programlamadır webmasterın buradaki görevi dış yüz ve kullanımı için gerekli kodlamayı ve tasarımı sağlamaktır ;) Hiçbir büyük şirket tek bir webmaster almaz çünkü eğer proje bazlı çalışıyorsa webmaster işin altından kalkamaz.

Tartışma çıkarmadım ama karşındaki kişiyi bilmeden böyle düşünmeniz insanı kırıyor. Bu düşüncelerden dolayı Türkiyede böyle kişiler zor bulunuyor. Bizim insanımızda şu var: Hazırı varsa neden sıfırdan bir daha yazayım. Sende bende bu düşünce olmaz ama Geneli ele alırsak bu düşünce.

Mümkünse karşıdaki kişinin kapasitesini yazdığı mesajla tartmayalım..

Son Düzenleme: PcMaKeR ~ 26 Mayıs 2009 12:18