Microsoft Ajax CDN

Microsoft geçtiğimiz aylarda web uygulama geliştiriciler için kendi CDN(Content Delivery Network) hizmetini duyurmuştu. Bu hizmet sayesinde artık uygulamalarımızda kullanmak istediğimiz Microsoft Ajax Library ve jQuery script dosyalarını doğrudan proje içerisinde saklamaya ihtiyaç duymuyoruz. Şöyle ki, bu hizmet zaten bahsi geçen dosyaların Microsoft sunucuları üzerinde saklanmasını ve uygulamaların bu dosyaları referans olarak alması durumunda ilgili kütüphanelerin kullanabilmesini sağlıyor. Bu çok mu gerekli diye sorabilirsiniz, cevabı tamamen sizin ihtiyacınıza bağlı. Sonuçta aynı dosyaları kendi projeniz içerisinde barındırdığınızda, istediğiniz zaman istediğiniz kısımlarını değiştirme, güncelleme şansına sahipsiniz. Ancak diğer tarafta bahsettiğimiz kütüphanelerde zaten çok ciddi ekipler tarafından geliştirilen ve üzerinde çok da fazla değişiklik yapılmaya ihtiyaç duyulmayan kütüphaneler. Dolayısıyla bu kütüphanelerin güvenilir bir CDN hizmeti üzerinden kullanımı performans ve uygulamadaki dosya karmaşasını azaltmak adına doğru hareketler olacaktır. CDN hizmetini sunan kurum dünyanın farklı konumlarında bu dosyaları barındırması için belki de binlerce sunucu kullandığı için sizin uygulamanıza gelen talepler load balancer'lar aracılığıyla en hızlı hizmet sunacak konumdaki sunucuya yönlendiriliyor.

Microsoft Ajax Library olsun jQuery olsun eklenti dosyaları ile birlikte ciddi büyüklüğe sahip(Microsoft jQuery’nin core dosyaları dışındaki eklenti dosyaları için CDN hizmeti sunar mı, şimdilik bilinmiyor) Dolayısıyla bu kadar dosyayı sunucuda barındırmak özellikle JavaScript dosyaları için hiyerarşi karmaşasına yol açabilir. Böyle bir karmaşa içerisinde çalışmak istemeyenler için şiddetle Microsoft, Yahoo, Google, Amazon gibi sağlayıcıların CDN hizmetlerini kullanmalarını tavsiye ederim. Microsoft AJAX CDN için bu sayfadan gerekli bilgileri alabilirsiniz.

Gelelim basit bir örnek ile Microsoft CDN'i test etmeye. Aşağıdaki kod parçalarında bir text input kontrolüne Microsoft Ajax Library'de yer alan Calendar bileşenini bağlıyorum. Dikkat edeceğiniz gibi CSS ve JavaScript dosyalarının konumları ajax.microsoft.com adresi üzerinden verilmiş.

<link href="http://ajax.microsoft.com/ajax/beta/0911/extended/Calendar/Calendar.css" rel="stylesheet" type="text/css" />

 

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/beta/0911/Start.js"></script>

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/beta/0911/extended/ExtendedControls.js"></script>

 

<script type="text/javascript">

    Sys.require(Sys.components.calendar);

 

    Sys.onReady(function () {

        Sys.create.calendar("#txt1");

    });

</script>

Visual Studio'da JavaScript kodlarını yazarken dahi intellisense özelliğinin tıkır tıkır çalıştığını, Microsoft Ajax Library'de yer alan nesne ve fonksiyonlara kolayca erişebildiğinizi göreceksiniz. Sayfayı çalıştırırken Fiddler gibi bir web debugger uygulaması kullanarak sayfayı izlerseniz olayın detaylarını da güzel bir şekilde görebilirsiniz.

Göreceğiniz gibi kırmızı kutu içerisindeki dosyalar sadece bizim kod içerisinde referansını verdiğimiz dosyalar. Önceki yazımın Script Loader kısmında belirttiğim gibi Microsoft Ajax Library çalışma anında ihtiyacı duyduğu dosyaları da istemciye yüklemektedir. İşte resimde mavi kutu içerisinde gördüğünüz dosyalar da diğer script dosyalarıdır. Tüm dosyaların Host kolonundaki adres bilgilerine bakacak olursanız dosyaların ajax.microsoft.com adresinden çekildiğini görebilirsiniz. Sonuç olarak sorunsuz ve daha hızlı çalışan bir AJAX uygulaması elde etmiş olduk.

17 Ocak 2010 Pazar 14:54

Yorum - RSSYorumlar (1)


facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

Microsoft Ajax Library (Yoksa ASP.NET AJAX 4.0 mı Desek?)

Geçtiğimiz ay içerisinde gerçekleşen PDC’09 konferansında Microsoft, ASP.NET AJAX adındaki AJAX kütüphanesini AJAX Control Toolkit ile birleştirerek artık Microsoft AJAX Library adında bir ürün ile yola devam edeceğini açıkladı. Microsoft AJAX Library! Kulağa hoş geliyor. Şu an Beta sürümü Codeplex üzerinden indirilip kullanılabilen bu kütüphane sadece ASP.NET WebForm uygulamalarında değil, ASP.NET MVC, PHP, Ruby on Rail gibi tüm web uygulamalarında kullanılabilir hale getiriliyor. Aslında ASP.NET AJAX jQuery’leşiyor diyebiliriz bu değişikliğe. Her ne kadar .NET Framework’den ayrı olarak geliştirilse de, ASP.NET 4.0 ile birlikte bu ürünün resmen duyurulması bekleniyor. Ben de geçtiğimiz haftalarda gerçekleştirdiğimiz INETA NEXT etkinlikleri vesilesiyle Microsoft Ajax Library’i inceleme şansına sahip oldum.

Microsoft Ajax Library ile neler değişiyor, ne gibi yenilikler geliyor. Şöyle kısaca özetlemeye çalışayım. İlerleyen zamanlarda fırsat bulursam belki detaylı yazılara da yer verebilirim.

Büyük ve düzenli bir JavaScript kütüphanesi: Temel Ajax kütüphanesi dışında Control Toolkit kontrollerinin istemci tarafında kullanılmasına olanak sağlaması nedeniyle JavaScript arşivi oldukça genişlemiş durumda. Debug dosyaları ile birlikte yaklaşık 200 .js dosyasına sahip bir kütüphanemiz var artık. Tabi ki akla ilk gelen bu dosyaların tamamını veya büyük kısmını uygulamamızda saklamak durumunda mıyız? İsterseniz saklayabilirsiniz, istemezseniz alttaki maddeyi okumanızı tavsiye ederim :)

Microsoft Ajax CDN: Microsoft kendi Ajax kütüphanesini ve jQuery kütüphanesini yine geçtiğimiz aylarda açtığı CDN(Content Delivery Network) hizmeti üzerinden ücretsiz olarak sunmakta. Yani yukarıda bahsettiğimiz JavaScript dosyalarının hiçbirini uygulamanızda barındırmadan kullanabilme şansına sahipsiniz. Bu hizmeti kullanarak uygulamanızın performansını daha iyileştirebileceğiniz gibi, sitenizin gereksiz bandwith tüketimini azaltmış olabiliyorsunuz. Yapmanız gereken tek şey .js dosyalarının referansını Microsoft’un sunucuları üzerinden vermek. Üstelik Visual Studio üzerinde çalışırken internete bağlı iseniz JavaScript intellisense özelliğini aynen kullanabiliyorsunuz.

Script Loader: Ajax Library’de yer alan script loader fonksiyonu(Sys.create) ile ihtiyaç duyduğunuz script dosyalarının sayfanın yüklenmesi esnasında istemciye gönderilmesi sağlanabiliyor. Nasıl yani, anlamadım demiş olabilirsiniz. Şöyle ki, malum artık kalabalık bir istemci kütüphanemiz var. Yapılacak bir işlem için veya oluşturulacak bir nesne için hangi JavaScript dosyaları gerekli sorusunu Script Loader sayesinde düşünmeye pek gerek kalmıyor. Sayfaya sadece temel script dosyalarını ekledikten sonra gerekli işlem veya kontrol ile ilgili çağırımları yaptığınızda arka planda gerekli tüm script dosyaları istemciye gönderilmekte. Örneğin Sys.require([Sys.components.dataView, Sys.scripts.WebServices]); ifadesi ile hem dataView nesnesini kullanacağınızı, hem de bir web servisine bağlanma işlemi yapacağınızı söylüyorsunuz, script loader da arka planda gerekli olan tüm script dosyalarını otomatik olarak istemciye yüklüyor.

İstemci Tarafında Data Yükleme(Client-side Data Binding): dataView adındaki nesne sayesinde artık istemci tarafında data binding işlemi yapılabiliyor. Microsoft Ajax Library’deki en göze batan yeniliklerden olan dataView nesnesi, arka planda bir AJAX talebi ile getirilen verilerin doğrudan istemci tarafında HTML koduna render edilmesini sağlıyor. Özellikle yoğun veri transferi yapılan iş uygulamalarında network trafiğini azaltmak ve hız adına müthiş bir yapı sunan bu özellik ile AJAX işlemleri daha performanslı hale geliyor. Diğer yandan dataView nesnesi sayfa ilk yüklendiğinde statik olarak HTML kodu içerisinde veri saklamayıp, {{ProductName}} şeklinde tanımlayıcıları bulundurduğu için, bu yapının arama motorları açısından bir dezavantaj olduğunu söyleyebiliriz. Tabi ki ilerleyen zamanlarda arama motorları bu tarz string veriler üzerinde özel indekslemeler yapacaktır diye temenni ediyoruz.

jQuery Entegrasyonu: Farklı JavaScript kütüphanelerine kolayca entegre edilebilen jQuery’nin Microsoft Ajax Library ile birlikte çalışması da sağlanmış durumda. Mesela jQuery seçicisi ile seçilen nesneye Ajax Library’de yer alan bir kontrolü kolayca bağlayabiliyorsunuz. Örneğin gerekli öntanımlamalar yapıldıktan sonra yazılan $("#txt1").calendar(); ifadesi jQuery ile seçilen txt1 elementine calendar nesnesi bağlamaktadır.

Client DataContext ve AdoNetDataContext: Açıkcası bu nesnelerle ilgili örnek yapma şansım olmadı, ama madem böyle bir yazı yazdık eksik madde kalmasın:) Burada belirtilen DataContext nesneleri ile bir web servisi veya Data Service üzerinden yapılan veri işlemleri iki yönlü olarak kolayca gerçekleştirilebilmekte. Somutlaştırmak gerekirse; web servisinden getirdiğiniz verileri istemciye yükledikten sonra, istemcinin bu veriler üzerinde yaptığı değişiklikleri ekstra efor sarfetmeden yine web servisi üzerinden sunucuya gönderebilmeniz mümkün. Tabi ki burada seçme ve güncelleme işlemini yapacak iki ayrı web metoduna ihtiyaç duyulacaktır.

Yine belirtilmekte fayda duyduğum önemli bir hususta Microsoft’un bu ürünün arkasında resmi olarak durması ve tam destek vereceğini belirtmesi. Bilindiği gibi bu zamana kadar Ajax Control Toolkit Microsoft tarafından resmi ürün olarak lanse edilmiyordu. Ajax Library içinde yer alan bu kütüphanede artık destek kapsamında. Görüldüğü gibi .NET Framework 4.0’ın çıkması ile sadece sunucu tarafında değil, istemci tarafında da çalışmamız gereken bir hayli ev ödevimiz var. İlerleyen zamanlarda bu konulara daha detaylı şekilde değinmek dileğiyle...

4 Ocak 2010 Pazartesi 00:20

Yorum - RSSYorumlar (3)


facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

ASP.NET’te jQuery ile AJAX İşlemleri

jQuery artık web uygulamalarında sıklıkla kullanılır hale geldi. Gerek sayfa tasarımına harika görseller ve efektler katması, gerekse AJAX taleplerini basit ve hızlı gerçekleştiriyor olması bu kütüphaneyi programcılar ve tasarımcılar için çok cazip hale getiriyor. Son zamanlarda jQuery ile bir web servisinin veya PageMethod'un nasıl çağrılabileceği şeklinde sık sık sorular duyunca ben de jQuery ile ASP.NET uygulamalarında farklı AJAX taleplerinin nasıl yapılabileceği ile ilgili ufak bir uygulama hazırladım. Bu doğrultuda bu yazıda da;

  • ASP.NET sayfasına
  • Parametre alan bir ASP.NET sayfasına
  • Web servisine
  • PageMethod'a

jQuery ile nasıl AJAX talepleri yöneltebileceğimizi inceleyeceğiz.

Öncelikli olarak jQuery kütüphanesinde AJAX taleplerini gerçekleştireceğimiz ajax isimli fonksiyonu tanıyalım. ajax fonksiyonu parametre olarak talep yapılacak url, varsa parametre verilerini, bu verileri iletme yöntemini(GET,POST gibi), talep sonucunda okunacak verinin tipi gibi bilgileri alır. Bunların dışında işlemin başarılı gerçekleşmesi durumunda sayfada güncelleme yapılmasını sağlayan veya hata oluşması durumunda gerekli işlemlerin yapılmasını sağlayan iki fonksiyon tanımlamasını da kendi içerisinde bulundurabilir. Burada saydığımız parametrik değerlerin tamamı zorunlu değildir, yapılan talepteki duruma göre sadece ihtiyaç duyulan parametreler kullanılabilir. Aşağıda AJAX talebi için kullanılabilecek basit bir metot çağırımı görülmektedir.

$.ajax({

    type: 'GET',

    url: 'Sayfa.aspx',

    success: function(result) {

        $('#sonuc').html(result);

    },

});

Parametrelerin ne anlama geldiğine bakalım:

type: Yapılacak talebin veri iletim yöntemi. GET, POST gibi.
url: Asenkron talebin yapılacağı adres.
success: Talebin başarılı bitmesi durumunda çalışacak fonksiyon. Burada talep sonucunda gelen veriler sayfaya işlenir.

Bunlar dışında kullanılabilecek birkaç parametre daha var, bu parametrelere ilerleyen kısımlarda değineceğiz. Buradaki success parametresinin değer olarak aldığı fonksiyon tanımlamasını C# dilindeki isimsiz metotlara(anonymous methods) benzetebiliriz. success metodundaki result değişkeni AJAX talebi sonucunda okunan veriyi taşımaktadır. Bu fonksiyon içerisindeki $('#sonuc') ifadesi de sayfamızdaki sayfa id'sini taşıyan HTML elementini işaretleyen bir jQuery seçici ifadesidir. Dönen AJAX cevabı sonuc isimli HTML elementinin içeriğine yazdırılacaktır. Artık bir örnek ile bu talepleri nasıl yönetebileceğimizi incelemeye başlayalım.

NOT: jQuery'de seçiciler, olaylar gibi temel kavramlar hakkında detaylı bilgi almak isterseniz size jQuery'nin resmi sitesini veya bu konuda zengin Türkçe içeriğe sahip olan www.eburhan.com adresini incelemenizi tavsiye ederim.

NOT: jQuery'de ajax() fonksiyonu dışında get() ve post() isimli fonksiyonlarla da AJAX talepleri yapılabilmektedir. Aynı işlemleri yapan fakat farklı kullanım şekilleri olan get ve post isimli jQuery fonksiyonları ile ilgili de araştırma yapabilirsiniz.

ASP.NET Sayfasına Talepte Bulunmak

jQuery fonksiyonunu oluşturmadan önce sayfamız içerisindeki HTML elementlerini hazırlayalım.

Default.aspx

<input type="text" id="text1" />

<input type="button" value="Seç" onclick="CallAspxPage();" /><br />

<span id="sonuc"></span>

Butona tıklandığında çağrılacak JavaScript fonksiyonu içerisinde jQuery ile yapılacak çağrının cevabı sonuc adındaki alana yazdırılacak. Geldik işin asıl önemli olan kısmına; jQuery ajax fonksiyonunun yazımına. Aşağıda basit olarak bir ASP.NET sayfasına yapılacak jQuery talebi görülmektedir.

Default.aspx

<script type="text/javascript">

    function CallAspxPage() {

        $.ajax({

            type: 'GET',

            url: 'Ajax1.aspx',

            success: function(result) {

                $('#sonuc').html(result);

            },

            error: function() {

                alert('Talep esnasında sorun oluştu. Yeniden deneyin');

            }

        });

    }

</script>

url kısmında yer alan Ajax1.aspx isimli dosyaya talepte bulunuyor ve dönen cevabı sonuc isimli span elementine yazdırıyoruz. Burada az önce gördüğümüz standart ajax fonksiyonu tanımlamasının dışında bir de error adında bir parametreyi görüyoruz. error parametresine bağlanan isimsiz metot ise talep esnasında bir hata ile karşılaşılırsa çalışacak. Sayfayı çalıştırıp butona tıklamamız durumunda sonuc isimli elementin içeriğine Ajax1.aspx sayfasının çıktısı gelecektir. Buradaki örnek aslında tüm web sayfası dosyaları için geçerli bir kullanım şeklidir. htm, asp, aspx, ashx, php gibi dosyalara da buradaki kod parçasında gördüğünüz şekilde talepte bulunabilir ve oluşan çıktıyı okuyabilirsiniz.

ASP.NET Sayfasına QueryString ile Talepte Bulunmak

jQuery'de ASP.NET veya sunucu taraflı çalışan başka bir sayfaya QueryString ile parametre gönderebilmek için ajax fonksiyona data isimli parametre ile değer göndermek gerekir. Burada parametreleri göndermek için farklı bir yazım biçimi bulunmaktadır. data: '{ "name":"Uğur" }' şeklinde kullanılan bu parametrede dikkat edileceği üzere değer süslü parantez karakterleri({}) içerisinde taşınmakradır. Parametre adı ve değeri çift tırnak karakteri(") içerisinde taşınmakta, eşitlik operatörü olarak da iki nokta karakteri(:) kullanılmaktadır. Eğer birden fazla parametre iletilecekse parametreler virgül karakteri(,) ile ayrılmalıdır. Aşağıda bir Ajax1.aspx isimli sayfamıza URL üzerinden parametre iletilerek ajax talebinin nasıl gerçekleştirileceği görülmektedir. Sayfada yer alan button elementimizin onclick niteliğini de aşağıdaki fonksiyonun adı ile değiştirmek gerektiğini belirtelim.

Default.aspx

function CallAspxPageWithQueryString() {

    $.ajax({

        type: 'GET',

        url: 'Ajax1.aspx',

        data: 'name=' + escape($('#text1').val()),

        success: function(result) {

            $('#sonuc').html(result);

        },

        error: function() {

            alert('Talep esnasında sorun oluştu. Yeniden deneyin');

        }

    });

}

Sayfayı çalıştırıp text1 isimli elemente bir isim girişi yapacak olursak Ajax1.aspx sayfasına ismin QueryString ile gönderildiğini ve sonucun sayfamızda yer aldığını görebiliriz.

Not: Yukarıda kullanılan escape() JavaScript fonksiyonu olası Türkçe karakter problemlerini gidermek amacıyla kullanılmıştır.


Resim: QueryString ile sayfaya gönderilen AJAX talebinin sonucu alındı

Web Servisine Talepte Bulunmak

jQuery ile XML Web Servislerine yapılan talepler JSON formatında elde edilerek değerlendirilebilmektedir. Web servislerine yapılan talep normal bir sayfa talebiyle benzerdir. Web servislerine yapılan talebin POST metoduyla gerçekleşmesi, contentType, dataType ve data parametrelerinin ajax fonksiyonunda belirtilmesi gerekmektedir. Çağrılan WebMethod parametre almıyorsa dahi data parametresi boş olarak verilmelidir. Aşağıda yerel makinede(localhost) yer alan ve name ile surname parametrelerini alan bir web servisine talep gerçekleşmektedir. Web servisindeki HellojQuery isimli metot web servis URL'sinin sonuna yazılmıştır.

NOT: Çağrılacak web servis class'ının System.Web.Script.Services.ScriptService niteliğini(attribute) uygulaması gerekmektedir. Böylece servis nesnesi kendisine gelecek asenkron taleplere cevap verebilecektir.

Default.aspx

function CallWebservice() {

    $.ajax({

        type: 'POST',

        url: 'http://localhost:5199/JQueryWebService/Service.asmx/HellojQuery',

        data: '{ "name":"Uğur","surname":"Umutluoğlu" }',

        contentType: 'application/json; charset=utf-8',

        dataType: 'json',

        success: function(result) {

            $('#sonuc').html(result.d);

        },

        error: function() {

            alert('Talep esnasında sorun oluştu. Yeniden deneyin');

        }

    });

}

Görüldüğü gibi web servisine yapılan talep JSON formatında okunmakta ve gelen değerler sayfaya aktarılmaktadır. Eğer web servisi parametre almıyor olsaydı data parametresi; data: '{}' şeklinde boş değer ile yazılmalıydı.

PageMethod'a Talepte Bulunmak

ASP.NET AJAX uygulamalarında sayfa içerisine yazdığımız WebMethod niteliği uygulamış static metotları asenkron talepler ile çağırabilmekteyiz. Bu tip metotlara PageMethod adı verilmekte ve ScriptManager ile istemciye yüklenen JavaScript fonksiyonları sayesinde bu metotlar AJAX taleplerinde kullanılabilmektedir. Benzer şekilde bu metotları jQuery ile yapılan AJAX taleplerinde de kolayca kullanabilmekteyiz. İlk olarak sayfamızın code-behind dosyasına bir tane PageMethod ekliyelim ve jQuery ile bu metodu nasıl çağıracağımızı görelim.

Default.aspx.cs

public partial class _Default : System.Web.UI.Page

{

    [System.Web.Services.WebMethod]

    public static string jQueryPageMethod(string name)

    {

        return "<h3>jQuery - PageMethod Talebi</h3>Merhaba " + name;

    }

}

PageMethod'lar ile ilgili daha detaylı bilgi almak daha önceden yazdığım bu yazıyı inceleyebilirsiniz. Peki yazdığımız bu metodu nasıl çağıracağız? Aşağıda jQueryPageMethod isimli metodun ajax fonksiyonundan nasıl çağrıldığı görülmektedir. Çağırım şekli web servisi çağırımına oldukça benzemektedir.

function CallPageMethod() {

    $.ajax({

        type: 'POST',

        url: 'Default.aspx/jQueryPageMethod',

        data: '{ "name":"Uğur" }',

        contentType: 'application/json; charset=utf-8',

        dataType: 'json',

        success: function(result) {

            $('#sonuc').html(result.d);

        },

        error: function() {

            alert('Talep esnasında sorun oluştu. Yeniden deneyin');

        }

    });

}

Bu şekilde bir ASP.NET uygulamasında farklı bileşenlere jQuery ile nasıl AJAX talepleri gönderebileceğimizi incelemiş olduk.

17 Aralık 2009 Perşembe 08:53

Yorum - RSSYorumlar (9)


facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

nedirtv?com Webinerleri Yeniden Başlıyor

Birkaç aylık aradan sonra nedirtv webinerlerine yeniden başlıyoruz. Ekim ayı içerisinde gerçekleştireceğimiz altı farklı webinerle  yeniden sizlerleyiz. Kurumsal İş Zekası(BI), SQL Server Analysis Services, IIS 7.5 ve Test Driven Development gibi yeni konuların da olduğu bu ayın programına erişmek ve facebook ajandanıza kaydetmek için bu linki kullanabilirsiniz. İlk webiner bu Cuma akşamı…

6 Ekim 2009 Salı 08:50

Yorum - RSSYorumlar (0)

Etiket: , ,

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

ASP.NET MVC Framework’e Genel Bakış

Model View Controller tasarım deseni(design pattern) bir uygulamanın model, view ve controller adında üç temel parça içerisinde geliştirilmesi esasına dayanmaktadır. Projenin bu şekilde üç parçaya ayrılmasının temel sebebi katmanlı mimari uygulamalarında da benimsediğimiz, proje bileşenlerinin birbirinden ayrıştırılabilecek katmanlarda, birbirlerinden bağımsız şekilde geliştirilebilmesini sağlamaktır(Seperation of Concerns). Bu esneklik projenin kolayca genişletilebilmesi, yazılan kodların kolayca güncellenebilmesini ve test işlemlerinin kolayca yapılabilmesini de beraberinde getirmektedir. Aslında burada bahsettiğimiz unsurlar büyük çaplı birçok projede ihtiyaç olan konulardır. Bu tarz ihtiyaçları gidermek için günümüzde çoğu uygulama platformunda farklı teknikler kullanarak, tasarım desenleri uygulanarak geliştirilen projenin çok sağlam temeller üzerine inşa edilmesi sağlanmaktadır. Web uygulamalarına baktığımız zaman özellikle son yıllarda MVC deseninin oldukça benimsendiği, başta Ruby ve Java gibi çoğu platformda kullanıldığı görülmektedir. Artan bu talep üzerine Microsoft'ta ASP.NET MVC Framework'ü geliştirerek artık web uygulamalarında ASP.NET Web Form'larından sonra ikinci bir uygulama geliştirme modeli sunmuştur. Aslında ASP.NET MVC'nin temelleri 2007 yılının ikinci yarısına dayanmaktadır. Microsoft yaklaşık 1.5 yıllık süreçte Preview, CTP ve Beta sürümleriyle çıkardığı bu ürünü yaklaşık 10 farklı sürümle geliştirmiş ve nihayi olarak Mart 2009 içerisinde resmi olarak piyasaya sürmüştür.

MVC desenin temel kullanım amaçlarından ve piyasadaki yerinden bahsettikten sonra dilerseniz ASP.NET uygulamalarına nasıl farklı bir tarz getirdiğine bakalım. ASP.NET MVC uygulamalarını vadettiği en önemli noktalar; test edilebilir, kolay genişletilebilir, Routing ile daha okunabilir URL adreslerine sahip, daha sade HTML çıktıya sahip uygulamalar tasarlanabilmesidir. Yine MVC uygulamalarının WebForm’lara naziren daha hızlı çalışacağını söylemekte pek yanlış olmayacaktır.

Öncelikli olarak MVC Framework'ü ilk kez inceleyecek olanları belki de çok şaşırtacak birkaç durumdan bahsetmekte fayda var. Zira ASP.NET MVC web uygulamalarında çok farklı bir geliştirme tekniği kullanılmakta ve klasik ASP.NET uygulamalarının belki de en sevilen bazı özelliklerinden burada mahrum kalınmaktadır. ASP.NET MVC uygulamalarında PostBack ve Olay(Event) tabanlı geliştirme mekanizması yoktur, sunucu kontrolleri(GridView, Calendar, FileUpload... vb) kullanılamaz ve ViewState nesnesi yoktur! İlk kez duyanlar için oldukça şaşırtıcı olsa gerek. Akla gelen ilk soru belki de şu olacaktır; sunucu kontrolleri ve olay tabanlı geliştirme yoksa ben nasıl uygulama geliştireceğim, yoksa ASP.NET öncesinde kullanılan ASP'ye mi dönüş yapıyoruz? Tabi ki hayır, ama kodlama mantığına baktığımız zaman büyük benzerliklerin olacağını da göreceğiz. Yine MVC Framework'ün gelişim sürecinde ASP.NET ekibi Visual Studio'ya eklediği birçok araç sayesinde kod yazımını oldukça azaltarak WebForm'lardakine benzer kolaylıkları programcılara sağlamakta. Burada vurgulanması gereken en önemli noktalardan birisi de şu olacaktır; ASP.NET MVC uygulamalarında yukarıda bahsettiğimiz özellikleri kullanamıyoruz, ancak uygulama tamamen ASP.NET Runtime'ı üzerinde çalışıyor. Yani siz uygulamayı geliştirirken arka planda .NET Framework'ün geriye kalan tüm nimetlerini kullanabiliyorsunuz. İşin .NET tarafında bu durumlar söz konusu. İyi ama nedir bu Model View Controller, herbir parçanın görevi nedir diye soracak olursanız, gelin bu kısmı ayrı bir paragrafta ele alalım. Öncelikle bu üç bileşene kısaca göz atalım:

- Controller: Uygulamaya gelen talepleri yöneten katmandır. Controller nesneleri içerisinde action adı verilen metotlar bulunur ve bu metotların görevleri gelen talepleri uygun View ve Model nesneleri üzerinden değerlendirmektir. Gelen sayfa talepleri URL bazlı olarak çözümleyerek ilgili action metoduna iletir. Controller içerisinde yer alan action metotları projenin View ve Model bileşenleriyle doğrudan iletişime geçebilir.
- Model: Uygulamanın veriye erişim ve iş mantığını gerçekleştiren nesnelerini saklayan kısmıdır. LINQ to SQL(.dbml) ile Entity Framework(.edmx) dosyaları veya DataTable, DataSet, DataReader gibi nesnelerle veri taşıyan tiplerimiz bu katmanda yer almaktadır. Veriye erişim gerektiğinde Controller ve View bu kısımda yer alan nesnelerle iletişime geçebilir.
- View: Projenin UI dosyaları burada yer almaktadır. Master sayfalar, .aspx sayfalar, user control'ler, yani kullanıcının göreceği dosyalar projenin bu kısmında yer alacaktır.

İstemciden gelen talepler Controller içerisinde yer alan nesneler tarafından yakalanır. İlgili Controller gelen URL'i çözümleyerek kendi içerisindeki uygun action metodunu çağırır. Eğer ilgili action'da veri ile ilgili işlemler yapılacaksa Model kısmındaki nesnelere erişilir, getirilen veriler ilgili View nesnesine gönderilir. Eğer veri ile ilgili işlemler yoksa talep doğrudan yine View nesnesine gönderilebilir. View ise sayfa içeriğini render ederek HTML çıktıyı oluşturur ve çıktı istemciye gönderilir. Aslında genel işleyişe baktığımızda standart ASP.NET uygulamalarından çok farklı olduğu dikkatimizi çekiyor. MVC uygulamalarında talep doğrudan .aspx sayfalarına iletilmez, Controller içerisinde yer alan action metotları ilgili sayfaya gidilmesini ve üretilen HTML çıktının istemciye iletilmesini sağlar. Dolayısıyla burada istemci doğrudan sayfalarla iletişime geçmez, ancak yazılarn farklı URL'ler ile sayfalara gidebilir. Aşağıdaki şekilde istemciden gelen bir talebin sunucu tarafında nasıl ele alınacağı görülmektedir.

ASP.NET MVC Uygulamasında Bir Talebin İşleyişi 
Resim: İstemciden gelen bir sayfa talebinin sunucuda işleniş yolu

ASP.NET MVC uygulamaları URL'in uygun formatta çözümlenmesiyle çalışmaktadır. Burada URL Routing adını verdiğimiz bir kavramla karşılaşıyoruz aslında. ASP.NET MVC'de standart olarak controller/action/id şeklindeki dizilimle URL'lere gelen talepler değerlendirilir. Bunun dışında farklı URL formatları da belirlenebilir, kendi özel URL formatlarınızı belirleyebilir, hatta URL içerisine yazılacak değerlere kısıtlamalar(constraints) dahi getirebilirsiniz. (URL Routing ile ilgili eğer fırsatım olursa ayrıca detaylı bir makale yazmayı planlıyorum) Products/Edit/3 şeklindeki bir URL'de Products controller'ı, Edit action'ı ve 3 ise id'yi simgeler. Aşağıda bazı URL formatları ve taleplerin izleyecekleri yollar listelenmiştir.

URL İzlenecek yol
site.com/Products/ ProductsController içerisinde yer alan Index action metodu çağrılır. Eğer adreste bir action belirtilmemişse varsayılan action Index olur.
site.com/Products/List ProductsController içerisinde yer alan List action metodu çağrılır.
site.com/Products/Edit/3 ProductsController içerisinde yer alan Edit action metodu çağrılır. Bu metoda 3 değeri id parametresi olarak gönderilir.
site.com/Categories/Details/4 CategoriesController içerisinde yer alan Details action metodu çağrılır. Bu metoda 4 değeri parametre olarak gönderilir.
site.com/Categories/Edit/4 CategoriesController içerisinde yer alan Edit action metodu çağrılır. Bu metoda 4 değeri parametre olarak gönderilir.

Aslında buraya kadar ASP.NET MVC'nin genel yapısından ve WebForm'lar üzerinde uygulama geliştiren programcılara yabancı gelebilecek özelliklerinden bahsettik. Bir sonraki yazımda örnek bir uygulama üzerinde de konuşuyor olacağız. http://www.microsoft.com/downloads/details.aspx?FamilyID=53289097-73ce-43bf-b6a6-35e00103cb4b&displaylang=en adresinden ASP.NET MVC için gerekli dosyayı bilgisayarınıza yükleyip kurabilirsiniz. Kurulum için .NET Framework 3.5 SP1 ve Visual Studio 2008 SP1'in bilgisayarınızda önceden kurulu olması gerekir. ASP.NET versiyonlamasıyla ilgili olarakta önemli bir noktayı belirtmekte fayda var; ASP.NET MVC Framework ASP.NET 4.0 ile mimariyle bütünleşik hale gelecek.

27 Mart 2009 Cuma 08:34

Yorum - RSSYorumlar (1)

Etiket:

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

Gençsen Geleceksin 2.0 - Gebze Yüksek Teknoloji Enstitüsü

Bir başka Gençsen Geleceksin 2.0 etkinliğinde 2 Aralık 2008 Salı günü saat 12:30'da Gebze Yüksek Teknoloji Enstitüsü(GYTE)'nde seminer veriyor olacağım. Microsoft'un Surface, Azure, XNA Studio, Silverlight gibi günümüz ve gelecek nesil teknolojilerinden ve bu teknolojilerin getireceği iş fırsatlarından bahsedeceğim bu seminere tüm GYTE öğrencilerini bekliyorum.

29 Kasım 2008 Cumartesi 00:36

Yorum - RSSYorumlar (0)

Etiket:

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

Microsoft Web Platform Installer: Geliştiriciler için Kolay Kurulum Sihirbazı

Microsoft'un son zamanlarda üzerinde çalıştığı uygulamalardan bir tanesi de Microsoft Web Platform Installer. Bu uygulama sadece ASP.NET yazılım geliştiricileri için değil Windows platformları üzerinde PHP uygulamaları çalıştıracak geliştiriciler için de gerekli bileşenlerin işletim sistemine kurulmasını sağlıyor. .NET Framework 3.5 Service Pack 1, ASP.NET MVC Beta, PHP için SQL Server Driver'ları, Visual Web Developer 2008 Express Edition, Visual Studio için SilverLight araçları, SQL Express 2008, IIS 7.0 yönetim araçları gibi birçok bileşeni tek bir uygulama üzerinden kurulabilmesi gerçekten biz geliştiricilerin kurulum dertlerini ortadan kaldırıyor. Özellikle işletim sistemini kurduktan sonra sağdan soldan bulduğumuz, indirdiğimiz dosyaları kurmak derdiyle uğraşmadan derli toplu bir kurulum yapma işini artık bu uygulamaya bırakabiliriz.

Windows Web Platform Installer SetupKurulum ekranında karşınıza çıkan Complete seçeneği standart olarak ihtiyaç duyulan tüm araçların kurulumunu, ASP.NET Developer seçeneği sadece ASP.NET programcılarının ihtiyacı olabilecek bileşenleri, Your Choice seçeneği ise tamamen kendi ihtiyacınıza göre gerekli bileşenleri kurmamızı sağlıyor. Başlangıçta 60 Kb'lık küçük bir dosyayı bilgisayarınıza indirmek yeterli. Seçimlerinize göre gerekli bileşenleri kurulum esnasından bilgisayarınıza yükleyerek kurulumum tamamlayacaktır. Uygulamanın Windows XP ve sonrasında çıkan tüm Windows işletim sistemlerine kurulabileceğini de belirtmek lazım.

Uygulamayı bilgisayarınıza indirmek için bu linki kullanabilirsiniz.

25 Kasım 2008 Salı 11:30

Yorum - RSSYorumlar (0)


facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

PPT ve SWF Dosyaları ile Çalışan SilverLight Örnekleri

Değerli hocam M.Yaşar ÖZDEN'in yaptığı çalışmaları sergilediği BÖTEBOnline isimli video portalını daha önceden incelemediyseniz ziyaret etmenizi tavsiye ederim. Bizim interneti sadece MIRC kanallarında chat yapmaktan ibaret bildiğimiz zamanlarda, Türkiye'nin internetten ilk canlı radyo ve televizyon yayınlarını yapan bu sitede şimdilerde Webcast'ler ve SilverLight ile hazırlanmış medya örneklerini bulabilmeniz mümkün. Yaşar Hoca'mın son zamanlarda hazırladığı SilverLight'ın PowerPoint sunumlarıyla(.ppt) ve Flash nesneleriyle(.swf) çalışması ilgili örnekleri gerçekten dikkat çekici.

Bu linkten SilverLight ile yapılmış örnekleri inceleyebilirsiniz.

13 Kasım 2008 Perşembe 10:28

Yorum - RSSYorumlar (0)

Etiket:

facebook'da Paylaş   twitter'da Paylaş   friendfeed'de Paylaş   del.icio.us'da Paylaş   stumpleupon'da Paylaş   Permalink

Bağlantılar



Takip Et

RSS Feed twitter friendfeed

Seminer/Webiner Programım

  • Seminer-WebinerASP.NET 4.0 WebForms Yenilikleri (Microsoft İstanbul Ofisi)
    29 Mayıs 2010

  • Seminer-WebinerVisual Studio 2010 Yenilikleri (Osmangazi Üniversitesi)
    15 Mayıs 2010

  • Seminer-WebinerASP.NET AJAX ile Zengin Internet Uygulamaları Geliştirme (Microsoft İstanbul Ofisi)
    3 Mayıs 2010

>> Etkinlik Takvimi