<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Onur Baykal Şahsi Blog &#187; codeigniter</title>
	<atom:link href="http://onurbaykal.com.tr/tag/codeigniter/feed/" rel="self" type="application/rss+xml" />
	<link>http://onurbaykal.com.tr</link>
	<description>Beyin Bedava!</description>
	<lastBuildDate>Fri, 03 Sep 2010 18:36:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<atom:link rel='hub' href='http://onurbaykal.com.tr/?pushpress=hub'/>
		<item>
		<title>MVC Pattern ve Framework Yapısı</title>
		<link>http://onurbaykal.com.tr/2010/02/mvc-pattern-ve-framework-yapisi/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mvc-pattern-ve-framework-yapisi</link>
		<comments>http://onurbaykal.com.tr/2010/02/mvc-pattern-ve-framework-yapisi/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 17:05:32 +0000</pubDate>
		<dc:creator>Onur Baykal</dc:creator>
				<category><![CDATA[Eğitimsel]]></category>
		<category><![CDATA[Teknoloji]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[çatı]]></category>
		<category><![CDATA[çerçeve]]></category>
		<category><![CDATA[cocoon]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[cppcms]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[desen]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascriptmvc]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[örüntü]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[veritabanı]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[zend framework]]></category>
		<guid isPermaLink="false">http://onurbaykal.com.tr/?p=1684</guid>
		<description><![CDATA[Herhangi bir proje sıfırdan geliştirileceği zaman genellikle nereden başlanacağı doğru belirlenmez. Bunun nedeni kodlama işlemi esnasında hangi pattern (desen, örüntü) kullanılacağı bilinmediğindendir. Birden fazla kişinin üzerinde çalıştığı projelerde bu sorun (bence) daha belirgindir. Eleman başına düşen kısımın nasıl geliştirileceği (belirtilmediyse) &#8230; <a href="http://onurbaykal.com.tr/2010/02/mvc-pattern-ve-framework-yapisi/">Okumaya devam et <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Herhangi bir proje sıfırdan geliştirileceği zaman genellikle nereden başlanacağı doğru belirlenmez. Bunun nedeni kodlama işlemi esnasında hangi pattern (desen, örüntü) kullanılacağı bilinmediğindendir. Birden fazla kişinin üzerinde çalıştığı projelerde bu sorun (bence) daha belirgindir. Eleman başına düşen kısımın nasıl geliştirileceği (belirtilmediyse) tamamen geliştiriciye bağlıdır. Bu ve bunun gibi sorunlar yaşamamak için biz bilgisayar mühendislerine belirli patternler öğretilir. Öğrenirken pek anlaşılır ve mantıklı gelmese de uygulaması bunun tamamen zıttıdır. Pek çok işlemi kolaylaştırmak için sıkça patternler ve frameworkler kullanılır. Öncelikle framework nedir bundan bahsedeyim daha sonra da MVC&#8217;ye ucundan dokunayım.</p>
<p>Framework çeviri olarak çatı veya çerçeve olarak kullanılsa da bence tam olarak anlamını karşılamıyor. Terim olarak belirli bir pattern üzerine kurulmuş, belirli temel kodlamaları yapılmış ve geliştiricinin bazı yaygın fonksiyonları kolayca kullanmasını sağlayan yapılardır. Çoğunlukla MVC (Model-View-Controller) Pattern üzerine kurulmuş Frameworkler popüler ve kullanım olarak kolaydır. Web tabanlı projeler için daha uygun olmasına rağmen masaüstü yazılımları için de kullanılabilecek olan Frameworkler var. Ben MVC Pattern ile <a href="http://cakephp.org">CakePHP</a> ile tanıştım. Açıkçası öğrenme aşaması hem kolay oldu hem de mantığı çok iyi kavrattı.</p>
<h2>Model-View-Controller Pattern</h2>
<p><a href="http://onurbaykal.com.tr/wp-content/uploads/2010/02/mvc-php.png"><img class="alignleft size-medium wp-image-1685" title="mvc-php" src="http://onurbaykal.com.tr/wp-content/uploads/2010/02/mvc-php-300x283.png" alt="" width="300" height="283" /></a>MVC hayatı kolaylaştıran bir pattern. Ögelerinin baş harflerinden oluşuyor.</p>
<p>Model, veritabanı ile ilgili işleri hallediyor. Bu neredeyse bir scriptin veritabanı ayarlarını ayarlamak kadar kolay. Veritabanı tabloları oluşturulduktan sonra Model gerekli bilgilerle dolduruluyor ve Frameworkünüz veritabanı bağlantısını otomatik olarak sağlıyor. Veritabanı doğrulamaları da buradan yapılıyor. Frameworke göre bazı değişiklikler olsa da genellikle birbirlerine benziyorlar.</p>
<p>View, kullanıcıya yansıtılacak olan şeylerin belirlendiği öge. Burada program kodundan çok HTML oluyor. Elbette veritabanından alınan verileri yazdırmak için kod kullanılıyor ama burada oldukça az olarak kod kullanılıyor. Kod kullanımı da oldukça sınırlı. Öntanımlı metotlar dışında dilin kendi kodları kullanılabiliyor. Frameworklerin View&#8217;da kullanılabilecek olan metotları genellikle belli ve çok daha sınırlı oluyor.</p>
<p>Controller, işlemlerin yapıldığı öge. Burada metotlar, View&#8217;a ne gönderileceği, veritabanı işlemleri (CRUD, create, read, delete, update) yazılıyor. Projenizin bel kemiği Controller kısmı. Geliştirme işleminin çoğu da burada  oluyor. İşlem gücü gerektiren şeyler de Controller üzerinden gerçekleştiriliyor.</p>
<p>Anlattıklarım pek açık gelmediyse yandaki resim biraz daha açıklayıcı olabilir. Tabii o resim PHP için (hatta internet bazlı Frameworkler için diye genelleyebiliriz) yapılmış.</p>
<p><a href="http://onurbaykal.com.tr/wp-content/uploads/2010/02/350px-ModelViewControllerDiagram.svg_.png"><img class="alignright size-medium wp-image-1686" title="350px-ModelViewControllerDiagram.svg" src="http://onurbaykal.com.tr/wp-content/uploads/2010/02/350px-ModelViewControllerDiagram.svg_-300x141.png" alt="" width="300" height="141" /></a>MVC Frameworklerinin kolaylığı, veritabanı işlemlerinin kolay olması, sık gerçekleştirilen işlemlerin metot olarak önceden tanımlanmış olması, Framework yeterli olmadığı zaman kullanılan dille eklemeler yapılabilmesi, farklı görevleri olan kodların ayrı olması ve böylece işlerin kolaylaşması, eklenti desteği, javascript, ajax kullanımının kolaylaştırılması&#8230; olarak sıralanabilir. Bahsetmediğim bir durum ise bazı MVC Frameworklerde dosya isimlerinin serbest olmaması. Örneğin <a href="http://cakephp.org">CakePHP</a>&#8216;de dosya isimleri şu şekilde: veritabanı tabloları çoğul, o tablonun Modeli tekil, Controllerı çoğul ve sonunda &#8220;_controller&#8221; etkli, Viewü ise Controllerda tanımlanan metot ismiyle aynı olmak zorunda. Karışık gelebilir ama gerçekten çok zor değil. Tabii bu her Frameworkte böyle değil.</p>
<p><a href="http://cakephp.org">CakePHP</a>&#8216;den sonra <a href="http://rubyonrails.org/">Ruby on Rails</a>&#8216;i de merak ettim. Sonuçta büyük projelerde yaygın olarak kullanılan MVC Frameworkü Ruby on Rails. Twitter, Xing, Shopify, Github, Lighthouse&#8230; gibi büyük servisler Ruby on Rails ile yazılmış. Ruby on Rails, <a href="http://www.ruby-lang.org/">Ruby programlama dili</a>ni kullanıyor. Ruby insanların okuyup kodun ne yaptığını anlayabileceği dillerden biri. Gerçekten sizi kendine hayran edecek özellikleri var. Python&#8217;a oldukça benziyor. Ruby on Rails konusunda şimdilik çok fazla bir şey söyleyemiyorum çünkü ben de hala tam olarak öğrenmiş değilim. Belki gün gelir Rails ile ilgili bir yazı da yazarım.</p>
<h2>Bazı MVC Frameworkler ve Dilleri</h2>
<p>CakePHP &#8211; <a href="http://www.cakephp.org">http://www.cakephp.org</a> &#8211; PHP</p>
<p>Zend Framework &#8211; <a href="http://framework.zend.com/">http://framework.zend.com</a> &#8211; PHP</p>
<p>Symfony &#8211; <a href="http://www.symfony-project.org/">http://www.symfony-project.org/</a> &#8211; PHP</p>
<p>Ruby on Rails &#8211; <a href="http://rubyonrails.org/">http://rubyonrails.org/</a> &#8211; Ruby</p>
<p>Cocoon &#8211; <a href="http://cocoon.apache.org/">http://cocoon.apache.org/</a> &#8211; Java</p>
<p>JavascriptMVC &#8211; <a href="http://www.javascriptmvc.com/">http://www.javascriptmvc.com/</a> &#8211; JavaScript</p>
<p>CodeIgniter &#8211; <a href="http://codeigniter.com/">http://codeigniter.com/</a> &#8211; PHP</p>
<p>Django &#8211; <a href="http://www.djangoproject.com/">http://www.djangoproject.com/</a> &#8211; Python</p>
<p>CppCMS &#8211; <a href="http://cppcms.sourceforge.net/wikipp/en/page/main">http://cppcms.sourceforge.net/wikipp/en/page/main</a> &#8211; C++</p>
]]></content:encoded>
			<wfw:commentRss>http://onurbaykal.com.tr/2010/02/mvc-pattern-ve-framework-yapisi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
