Ana Sayfa >
07.Kasım.2010 >
PHP ve JS Frameworklere genel bakış
PHP ve JS Frameworklere genel bakış
İçindekiler
- Giriş
- Framework kavramı
- PHP frameworkler
- JS frameworkler
- Peki hangisini seçeceğim ?
- Hızlı bir başlangıç ve sonuç için benim önerilerim
- Sonuç
“Hibrit geliştiricler olduk!” Evet bu terimi geçenlerde bir yazıda okumuştum ve hemen hayatıma dahil ettim. Ne anlama geliyor diyeceksiniz. Bizler artık web'in ne kadar hızla geliştiğini ve bunu yakından takip etmemizin ne kadar önemli olduğunun farkındayız. Peki bu takip yarışını başarabilmek için sadece bir alanda uzmanlaşmak yeterli midir. Elbette uzmanlaşmak çok önemlidir ama bir alan beraberinde bir çok yan dal ile birlikte gelmektedir. Örneğin biz kendimize web geliştiricisi diyoruz ama çoğumuz sadece kodlama yapmıyoruz. Bu süreçlerin içerisinde analizden tutun da veri tabanı tasarımına, arayüz tasarımı, görsel tasarımlar, grafik tasarım v.b. bir çok alana zaman zaman dallanmak zorunda kaldığımız olmuştur. İşte bunca çok alanla bir şekilde -zaruriyetten- uğraşan ve bu konular hakkında bilgisi olan bizlere hibrit geliştiriciler deniyor. Bunu örneklemek gerekirse; hem benzinle hem de güneş enerjisi ile çalışabilen araçlar sanırım çok net açıklayacaktır.
Bunca çok alanla uğraşmamız gerektiğinden üretim süreçlerimizi hızlandırmamızı artık kaçınılmaz olmuştur. İşlerimizde vakitin nakit oldugunu düşünürsek hangi alanda ne üretiyor olursak olalım mutlaka frameworkleri (uygulama çatılarını) kullanmamız gerekmektedir. Frameworkler hayatımızı kolaylaştırmak, zamandan kazandırmak, bilgi ve deneyimlerimizi arttırmak, hızlı üretmemiz için yanıbaşımızdalardır. Onları kullanın!
Framework – uygulama çatısı, belli amaç için bir araya getirilmiş, belirli bir işi yapmak üzere oluşturulmuş mimari bir yapıdır. Bu mimari yapı geliştirilen uygulamanın içeriğine göre bünyesinde bir çok araç barındırabilir. Frameworkler genellikle açık kaynak kodlu olur. Güzel ve anlaşılır bir dil ile dokümante edilir ki geliştiriciler kolayca adapte olabilsin. Bu gün uygulama çatılarının, yazılım geliştirme, web uygulamaları geliştirme, tasarım ve modelleme gibi bir çok farklı alanda kullanıldığını görüyoruz.
Uygulama çatıları geliştiricileri belirli bir standartta kodlama yapmaya teşvik eder. Yaptığımız bir çok rutin işi bir araya getirilmiş kütüphane ve araçlarla tekrar tekrar yazmadan sadece kullanma yöntemi ile hızlı bir şekilde çözmemizi sağlar. Böylelikle kod tekrarları yapmaktan kurtulmuş oluruz. Örneğin bir çok uygulama çatısı, veri tabanı sınıfları, şablon özellikleri, oturum yönetimi, modüler yapılar, kod üreticiler gibi faydalı araçları bünyesinde barındırmaktadır.
Özetle framework'ler projelerimize odaklanmamızı sağlayarak mimari kurma ve rutin süreçleri çözmekle boğuşmak yerine hızlı bir şekilde üretim yapmamızı sağlayan ortamlardır. Ayrıca frameworklerin bir başka güzel yanı da geliştirici topluklarına dahil olarak o kişilerin bilgi ve deneyimlerinden yararlanmamızı sağlarken, bir çok alanda kendimizi ister istemez geliştirmemizi sağlamaktadır. Örneğin ben MVC yapısını ilk kullandığım CodeIgniter Framework sayesinde öğrenmiştim.
Neden frameworkleri kullanmalıyız ?
- Framework kullanırsanız uygulamalarınızı geliştirme süreniz kısalır.
- Yazdığınız kodlar spagetti gibi karmaşık olmak yerine lazanya gibi daha katmanlı temiz bir hal alır.
- Kodlarınızın bakımı kolaylaşır.
- Uygulamanız ve kodlarınız yapısal bir hal alır, birbirine girmez.
- Kodlarınız daha kolay anlaşılır bir hal alır, ekibe yeni dahil ettiğiniz birisi ne yaptığınızı anlamak için debelenmez.
- Kodlarınızı ölçeklendirebilir, ne yapıp ne yapamayacağınıza daha rahat karar verebilirsiniz.
- Kendinizi tekarlamadan, tekrar kullanılabilir kodlar yazarsınız, nesne yönelimli programlama yaparsınız.
- Çevik (agile) programlama disiplinlerine rahat adapte olursunuz.
- Açık kaynaklıdırlar. Kodlarını incelediğinizde ufkunuz genişler. Yeni bilgiler keşfeder, kendinizi geliştirmeye başlarsınız.
- Tekerleği yeniden icat etmez, Amerika'yı yeniden keşfetmek zorunda kalmazsınız.
Frameworklerde bazı ön plana çıkan terimler
- MVC (Model-View-Controller): Üç katmanlı mimari demektir. Uygulamamızın iş süreçlerini yöneten Controller katmanı, veri tabanı işlemlerini yaptığımız model katmanı ve kullanıcı arayüzlerine çıktı üreten view katmanlarını temsil eder. Uygulamamızı parçalara bölerek daha esnek bir geliştirme yapmamızı sağlar ve böylelikle iş süreçleri biribirine karışmaz.
- DRY (Dont repeat your self): Kendini tekrarlama! Bu terim bir kere yaz heryerde kullan, az kod yaz gibi kavramlarla kısaca özetlenebilir.
- ORM (Object Relation Mapping): Oblejeler ile veri tabanı tablolarınızı ilişkilendirmenizi sağlar. Sınıflarınızı nesne yönelimli yapılar kurarak oluşturup, veri tabanı tablolarınıza sınıflarınızı kullanarak erişmenizi sağlayan bir yapıdır.
- Multiple Database Support (Çoklu Veri Tabanı Desteği): Birbirinden farklı veri tabanlarıyla aynı anda yada farklı zamanlarda çalışabilirsiniz. Örn: MySQL, PostgreSQL, SQLite, MsSQL v.s.
- Templates & Layouts (Tema ve Şablon): Uygulamanızın view katmanındakı arayüz şablonlarımızı oluşturmamızı ve bunları kolayca yönetip, birbirinden farklı tasarım şablonları kullanmamızı sağlayan yapılardır.
- Configuration (Konfigürasyon): Aynı uygulamamızı farklı ayarlarlarla çalıştırmamızı sağlar. Belli başlı özellikleri kodlara müdahale etmeden basit konfigürason dosyalarındaki parametrelerle oynayarak değiştirebilirsiniz.
- Caching (Ön Bellekleme): Uygulamanızın çıktı katmanındakı verileri veya veri tabanı kayıtlarımız gibi alanları ön belleğe atarak performans kazanmamızı sağlayan yapılardır.
- Validation (Doğrulama): İş katmanında yada form alanları gibi kısımlarda yada veri tabanı kayıtları sırasındakı kontrolleri kolayca yapmamızı sağlayan özellikler bütünüdür.
- Modular Structure (Modüler Yapı): Uygulamamızdakı birbirinden bağımsız yada ilişkisel olarak çalışacak kısımları modüler olarak parçalara bölmemizi sağlar.
- Auth ve Acl (Yetkilendirme ve Rol): Uygulamamızdaki kullanıcıların yetkilendirilmeleri ve yetki seviyelerinin roller ile belirlenmesini sağlayarak erişim kontrollerimizi daha efektif yapmamızı sağlayan kısımlardır.
- Console (Konsol Kod Üreticiler): Kodlarımızı, veri tabanı işlemlerimizi, dizin yapılarımızı komut satırından basit komutlar yazarak üretmemizi sağlarlar. Örn: zf create project test_app
Gördüğünüz gibi bir framework ile çalışmaya başladığınızda bir çok yeni terim ve metodolojiyi de beraberinde getiriyor. Tüm bunlarla uğraşmak mesleki gelişimimizde çok önemli rol oynamaktadır.
Bu gün PHP'nin dünyadaki en popüler dillerden birisi olmasındaki etken şüphesiz ki her geçen gün yeni PHP Framework'lerin ortaya çıkması ve bunların birbirleriyle çok sıkı bir rekabet halinde olmasıdır. PHP her ne kadar başlı başına çok güçlü olsa da frameworkle sayesinde inanılmaz derecede yaygınlaşmış ve bu sayede gelştirici sayısı artarak gücüne güç katmıştır.
PHP Frameworkleri internette araştırmaya başladığınızda hemen gözünüze çarpacak olanlar Zend Framework, CakePHP, CodeIgniter, Symfony... gibi isimlerle karşılaşacaksınız. Bu liste okadar uzar gider ki bir süre sonra hepsi birbirine benzemeye başlar. Ama benim burada isimlerini verdiklerim bilinen en popülerleridir. Her birisinin birbirlerine göre avantaj ve dezavantajları vardır. Ama kendiniz detaylı araştırmak istersiniz diye ben yinede aşağıda kükük bir liste hazırladım.
Kısa bir araştırma sonucu bulunabilecek bazı PHP Frameworkler
- CodeIgniter (CI): ExpressionEngine adındaki CMS ile paralel geliştirilen, çok geniş bir topluluğu bulunan, PHP4 ve PHP5 de çalışabilen, öğrenilmesi en kolay frameworklerden birisidir. İlk göz ağrımızdır. Bizi frameworkler ile tanıştırdığı ve ufkumuzu acaip açtığı için bende yeri ayrıdır. Birçok Facebook uygulaması CodeIgniter ile geliştirilmektedir.
- Zend Framework (ZF): PHP Geliştiricileri tarafından hazırlanmıştır. PEAR kütüphaneleri gibi birbirinden bağımsız olarak kullanılmak üzere tasarlanmıştır. Bir araya geldiklerinde etkileşimli çalışacak kütüphaneler barındırır. OOP ve PHP5'i en katı şekilde uygulayan frameworklerden biridir. Öğrenilmesi biraz zor ama uzun vadede arkanızda sağlam bir şekilde duracak en kurumsal uygulama çatısıdır. lab2023 - internet teknolojileri olarak bizler de, geliştirdiğimiz tüm ürünlerimizde ve Kebab Framework'ün alt yapısında Zend Framework'ü kullanmaktayız.
- Symfony (SF): Symfony Fransız'lar tarafından geliştirilmektedir. Bilinen bir çok frameworkun aksine tekerleği yeniden icat etmektense kabul görmüş en iyi yöntemleri kendi bünyesinde toplamayı tercih etmiştir. Bunu okadar iyi yapmıştır ki SF'yi incelediğinizde zaman zaman bazı ZF özellikleri, CI de bulunan bir plug-in, RubyOnRails'den gelme bir özellik hatta ve hatta JAVA frameworklerin bile bir takım özellikleri karşınıza çıkabilmektedir. Yahoo server-side uygulamalarında Symfony'i kullanmaktadır.
- Diğerleri: CakePHP, PHPDevShell, Yii Framework, Akelos, ZooP, Kohana v.s.
Detaylı incelemek isterseniz, PHP Frameworklerin karşılaştırma tablosunu içeren bir wikipedia sayfası da var.
Javascript tarayıcı savaşlarından en çok etkilenen dillerden birisidir her halde. Javascript'in client-side (kullanıcı taraflı) bir teknoloji olması ve nihai çalışma ortamlarının web tarayıcıları olması bu savaşların ne denli danışıklı dövüşüklü olduğunu ortaya koymaktadır. Tarayıcılar ben HTML'yi daha hızlı yorumlarım, benim CSS'leri daha hızlı seçerim, yok efendim ben DOM'u daha efektif yönetirim, hayır en hızlı JavaScript yorumlayıcısı bendedir diye dursunlar bu savaşlardan en karlı çıkanlar süphesiz biz web geliştiriciler olmaktadır. Neden mi ? Elbette ki bu rekabet bir çok JavaScript Framework'un ortaya çıkmasına sebep olmuştur.
Frameworkler her alanda kullanılırken javascript geliştiricilerin bundan geri kalacak yanları elbette yoktu. Webin etkileşimli yanını temsil eden javascript bugun o kadar yaygınlaşmıştır ki, eminim web uygulamalarında hemen hemen hepimiz bir kere bile olsa bir işlem sonrası ekrana basit bir "Alert" çıkaran javascript kodu yazmışızdır.
Kısa bir araştırma sonucu bulunabilecek bazı JS Frameworkler
- Prototype: Bildiğim kadarıyla ilk JavaScript uygulama çatılarındandır. Bir çok JS framework'e ilham olmuştur. Temel işlevleri yerine getirir ve efekt kütüphaneleri içeren script.aculo.us framework'un temelini oluşturur.
- JQuery:
Daha az yazın daha çok yapın
sloganıyla çıkan, en hızlı gelişen ve yaygınlaşan uygulama çatılarından birisidir. Çok geniş bir plug-in arşivi vardır. GitHub gibi sosyal kodlama ortamlarının nimetlerinden uzun zamandır yararlandığı için gönüllü geliştirici sayısı fazladır. Bu gün yeni geliştirilen her üç plug-in veya component'ten birisinin JQuery'de de karşımıza çıktığını görürüz.
- ExtJS (EXT): Yanlış hatırlamıyorsam 2006~2007 yıllarından birisinde, Jack Slocum tarafından Yahoo User Interface (YUI)'den çatallandırılarak yui-ext olarak piyasaya sürüldü. Sadece bir framework olarak araçlar sunmasından ziyade geliştiricilere geniş kullanıcı arayüzü komponentleri de sunarak JS framework'ler dünyasında ses getirmiştir. Kullandığı dil nesne yönelimli alt yapısı ve temiz kodlamasıyla çok kullaışlıdır. Yahoo gibi bir devin temellerini attığı bu framework oldukça da güçlüdür. Bu gün ExtJS'in büyümesi okadar hızlanmıştır ki bünyesinde alanında uzman birkaç framework'ü de dahil ederek Sencha ismiyle kendisini yenilemiştir. Sencha; ExtJS, Raphael ve JQTouch ekibinin gücü ile web ve mobil uygulamalar için çok kullanışlı çözümler üretmektedir. Benim gözümde ExtJS, arkasına Sencha gibi bir firma olmasından ötürü PHP ve Zend bileşimindeki Zend Framework gibi, kurumsal bir yapıya sahiptir. lab2023 - internet teknolojileri olarak bizler de, geliştirdiğimiz tüm ürünlerimizde ve Kebab Framework'ün client-side ve kullanıcı arayüzleri tarafında ExtJS'i kullanmaktayız.
- Diğerleri: Yahoo User Interface (YUI), Dojo, Google Web Toolkit, MooTools, script.aculo.us v.s.
Detaylı incelemek isterseniz, JS Frameworklerin karşılaştırma tablosunu içeren bir wikipedia sayfası da var.
Evet, uygulama çatıları hakkında genel bir bilgi sahibi olduk. Peki bunca framework ve araç içerisinden hangisi size uygundur ? Karar verirken nelere dikkat etmeniz gerekir ? Bu aşamada kendi bilgi birikiminize ve deneyiminize göre karar vermek en doğrusudur. Bir de bizim gibi bu süreçlerden geçmiş kişilerin fikrini almak da size boşuna zaman kaybettirmez, hedef odaklı bir seçim yapabilirsiniz.
Framework seçiminde dikkat edilmesi gereken bazı önemli noktalar;
- Performans ve genişletilebilirlik.
- Sürdürülebilirlik ve geriye dönük desteğinini iyi olması.
- Toluluk desteğinin iyi olması.
- Geliştiren ekibin güvenilir ve deneyimli olması. Örneğin Zend Framework'ü PHP geliştiriclerin hazırlaması gibi.
- Kolay öğrenilebilirlik ve öğrenme eğrisinin düşük olması.
- Kolay geliştirilebilirlik, yeterlilik, esneklik.
- Sunduğu araç ve özelliklerin çokluğu.
- Yeterli ve temiz dokümantasyonunun olması.
- IDE desteği olup olmaması.
Ayrıca unutmayın, takım tutar gibi programlama dili veya uygulama çatısı tutmamak gerekir. Kullanacağınız her uygulama çatısı size yeni deneyimler kazandıracaktır. O bakımdan denemekten korkmayın!
- Bilgi seviyenizden emin olun.
- Ne istediğinizden emin olun.
- Neleri yapıp neleri yapamayacağımızdan emin olun.
- Eğer eksik gördüğünüz konular varsa bu konuda bir ön hazırlık yapın. Örn: Zend Framework'e başlamadan önce mutlaka OOP (Nesne Yönelimli Programala) konusunda ön araştırma yapın.
- Öğrenmesi ve başlangıcı kolay bir framework tercih edin.
- Hızlı bir başlanğıç yapıp hemen "Hello world!" yapmadan önce mutlaka araştırma yapın.
- Öğrendiklerinizi not alın.
- Asla işimi görüyor bu bana yeter demeyin. Mevcut metodolojinizi hep bir adım öteme taşımanın yollarına bakın.
- Topluluğa karışın
- Deneyin, yapın, bozun, kurcalayın.
Frameworklerin faydaları ve bizlere ne gibi katkılar sağlayacağı ortada. Elinizin altında internet gibi bir deniz var. Hepmiz bir noktada birşeyler üretiyor ve işimizi yapıyoruz. Artık web uygulamalarında günümüzde "less code - daha az kod" kavramının daha önemli bir hal almaya başladığını düşünürsek, kendimizi tekrarlamaktan kaçınmak, hızlı bir üretim yaparak çabuk sonuç üretmek için uygulama çatılarını hayatınızın bir parçası haline getirmeniz yararınıza olacaktır.
Unutmayın az kod yazmak, bildiklerimizi unutmaya yol açmaz, aksine size araştırma yapmak ve kendinizi geliştirmek için daha fazla zaman bırakır.
Hazırlayan
Tayfun Öziş ERİKAN