ASP.NET MVC Framework

MVC;  Model, View (görünüm) ve Controller (denetleyici) kelimelerinin baş harflerininin birleştirilmesiyle oluşturulmuştur. Bir tasarım desenidir.

Model – View – Controller tasarım deseni, bir uygulamayı 3 anlamlı parçaya ayırır. Adından da anlaşılacağı şekilde model, view ve controller parçaları.

ASP.NET MVC Framework ise MVC deseni ile web uygulamaları geliştirmek için Microsoft tarafından geliştirilmiş bir framework. Geleneksel ASP.NET Web Formları desenine bir alternatiftir.

ASP.NET MVC Framework daha açık ve hafiftir ama en önemlisi test edilebilir bir Presentation tasarım desenidir.

Halihazırdaki web formları ile kullandığımız masterpage, membership ve authentication gibi özellikleri de kullanabileceğiniz bir yapıdır. Çünkü MVC Framwork de System.Web’in bir parçası olarak System.Web.Mvc isimuzayı altında tanımlıdır.

MVC, 1970’lerden beri yaygın kullanılan bir tasarım desenidir. Bazı web uygulamaları için MVC kullanmak yararlı olacaktır. Ama MVC her web projesi için uygun olmayabilir. Bu yüzden bazı web uygulamaları da postback mekanizmasını kullanan geleneksel ASP.NET uygulama desenini kullanmaya devam edecektir. Belki ikisinin kombinsyonu şeklinde uygulamalar da göreceğiz.

MVC Framework bileşenlerini ayrı ayrı açıklayalım.

Model

MVC mimarisinde, Model bileşenleri veriye ve uygulama tarafından kullanılan servislere bir arayüz sağlama görevini üstlenir. Bu yüzden Controller bileşenleri verilerin okunması, yazılması, değiştirilmesi gibi işlemlerle ilgilenmez; bunun yerine veri erişimini ve manipülasyonunu sağlayan Model bileşenleriyle iletişim kurarlar. Model bileşenleri iş mantığı (business logic) kısmının kodlandığı kısımdır.

View

Uygulamanın kullanıcı arayüzünü (UI) oluşturan bileşenlerdir.

Controller

MVC uygulamalarının merkezindeki bileşendir. Süreci yöneten ve yönledirmeleri yapan kısımdır. URL Routing gibi pek çok heyecan verici işlem bu bileşen tarafından icra edilir.

Controller, kullanıcı ile iletişimi yönetir, Model ile iletişim kurar, hangi View görüntülenecekse seçer, hazırlayıp görüntüler.

Bir MVC uygulamasında View sadece bilgileri görüntüler, kullanıcı girişlerini ve etkileşimlerini Controller yönetir.

MVC, farklı işlevleri (veri girişi, iş mantığı, kullanıcı arayüzü mantığı vb.)  birbirinden ayırıp bunları gevşek bağlaşım (loose coupling) ile ilişkilendirerek uygulama geliştirme olanağı sağlar. Bu desen, hangi çeşit mantık uygulamanın neresinde bulunacak, onu seçer.

Kullanıcı Arayüz mantığı View bileşenine aittir. İş mantığı Model bileşenine aittir. Uygulama geliştirirken bu ayrıştırma karmaşayı önler. Bir zamanda uygulamanın sadece bir bileşenine odaklanmayı sağlar. Mesela iş mantığından bağımsız olarak sadece kullanıcı arayüzüne odaklanabilirsiniz.

MVC desenini bu kadar güçlü kılan belki de ayrıştırma yeteneği ile uygulamaların birim testinin (unit test) kolay yapılmasıdır. Web formları tabanlı bir web uygulamasına göre çok daha kolay bir şekilde birim testleri uygulamayı olanaklı kılar.

ASP.NET MVC, bileşenleri arasındaki etkileşimi arayüzler (interface, nesne yönelimli programlamadaki arayüz terimini kastediyorum) üzerinden gerçekleştirir.

Web formları tabanlı ASP.NET uygulamalarının test edilebilmesi için bir web sunucuya ihtiyaç duyulur. MVC ise arayüzler yardımıyla framework’ten bağımsız olarak uygulamanın test edilmesini olanaklı kılar.

MVC uygulamasının her bir birimi arasında gevşek bağlaşım bulunması, paralel geliştirmeyi de olanaklı kılar. Mesela, bir grup View üzerinde çalışırken diğer bir grup Model’de iş mantığı üzerine çalışabilir. ASP.NET MVC bu maharetini arayüzler üzerinden sergiler.

ASP.NET  MVC Avantajları

v  Uygulamayı Model, View ve Controller bileşenlerine bölerek karmaşıklığı önler.

v  Viewstate ve sunucu taraflı form kullnamaz. Uygulamanın bütün evelerine müdahale etmek ve hakim olmak isteyen geliştiriciler için idealdir.

v  Front Controller deseni kullanır. Bütün istekleri (request) tek bir Controller tarafından karşılanıyor. Bu sayede MVC, çok esnek bir yönlendirme (Routing) altyapısına sahiptir.

v  Daha iyi Test Driven Development (TDD) desteği sağlar.

v  Geniş bir takım tarafından geliştirilen, uygulam davranışları üzerinde daha fazla kontrol gerektiren web uygulamları için ideal bir yapıdır.

Web Formları Avantajları

v  Olay modeli ile geliştirme yapmaya onanak sağlar. Yüzlerce sunucu kontrolü üzerinden binlerce olay vardır.

v  Bir sayfaya özel işlevsellikler ekleyebilen Page Controller desenini kullanır.

v  View state ve sunucu tabanlı formlar yardımıyla sayfanın durum bilgisi kolaylıkla yönetilebilir.

v  Hızlı uygulama geliştirme yapmaya müsait olduğundan küçük gruplarla yapılacak karmaşık olmayan web projelerinde iyi çalışır.

v  MVC modeline göre daha az kod gerektirir.

ASP.NET MVC Framework Özellikleri

MVC Framework yapısının özelliklerini özetleyelim.

Uygulama görevlerini (giriş mantığı, iş mantığı, arayüz mantığı) ayırır. TDD desteği var.

MVC yapısı tamamen arayüz tabanlıdır, uygulamadaki gerçek nesnelerin simulasyonlarından oluşan mock nesneleri yardımıyla test edilebilir. ASP.NET Controller nesnelerini, web uygulamasını çalıştırmadan birim testine  (unit test) sokabiliriz. .net Framework ile uyumlu olan hernagi bir test framework ile unit-test yapabilirsiniz. Visual Studio Unit Test adlı test motoru Preview 3 ile hazır gelmektedir. Ama diğer yaygın test motorları da kullanılabilir.

Esnek ve tak-çıkar özellikleri olan bir framework. Her bir bileşen, aynı işlevi yerine getiren farklı alternatifleri ile değiştirilebilir. Mevcut bileşenler kendi isteğimize göre özelleştirilebilir.

Güçlü bir URL yönlendirme (URL Routing) mekanizması var. Dosya uzanltılarına (asp, aspx vb.) ihtiyaç yoktur. SEO ve REST uyumlu URL adlandırmaları kullanılabilir.

View şablonları olarak ASP.NET sayfası (.aspx), kullanıcı kontrolü (.ascx) ya da masterpage (.master) kullanılabilir.

İç içe masterpage, in-line ifadeler (<%=%>), deklaratif sunucu kontrolleri, şablonlar, veri-bağlama (data-binding), yerelleştirme gibi mecut ASP.NET özelliklerini MVC ile de kullanabilirsiniz.

Random Nesnesi (Rastgele Sayı Türetmek)

Rastgele belirli bir sayıya sahip olabilmek için kullanılan nesnedir.

Random nesnesi: Karmasık olarak belirli bir sayıya sahip olabilmek için kullanılan nesnedir. next methodu en onemli ozelligidir. kimi zaman sayı aralıgını siz girersiniz kimi zaman ona bırakırsınız…

Rastgele belirli bir sayıya sahip olabilmek için kullanılan nesnedir.

Random nesnesi: Karmasık olarak belirli bir sayıya sahip olabilmek için kullanılan nesnedir. next methodu en onemli ozelligidir. kimi zaman sayı aralıgını siz girersiniz kimi zaman ona bırakırsınız…

Random rnd = new Random();this.Text = rnd.Next().ToString();

Önemli: Asla verilen değerin tekrar verilmeme garantisi yoktur. Bunu ancak siz saglarsınız…

Bu kullanımda verilen ilk deger sisteme dahildir, ancak maksimum değer aralığa dahil değildir.

Kod 1 ile 50 arası rastgele sayı üretir.

Random rnd = new Random();this.Text = rnd.Next(1, 50).ToString();

Yaratılan byte[] dizisinin eleman sayısı kadar 0 ile 255 arasında deger doldurur.

Random rnd = new Random();byte[] sayilar = new byte[5];rnd.NextBytes(sayilar);

this.Text = sayilar[sayilar.Length – 1].ToString();

NextDouble: 0.0 ile 1.0 arasındaki kusurlu karmasık bir degeri sizlere teslim eder.

Random rnd = new Random();double gelenKarma = rnd.NextDouble();this.Text = gelenKarma.ToString();

Mesaj kutusunu 1 ile 10 arasında rastgele sayı gösterelim.

Random RastgeleSayi = new Random();int GelenSayi = RastgeleSayi.Next(0, 10);MessageBox.Show(GelenSayi);

Hadi Pekiştirmek için bide yazı tura uygulaması yapalım

Random YaziTura = new Random();int sonuc = YaziTura.Next(0, 2);if (sonuc == 0)

{

MessageBox.Show(“Yazi”;

}

else

{

MessageBox.Show(“Tura”;

}

Açıklama:

0 ile 2 arasında rastgele sayı ürettik 2 sisteme dail olmadığı için ya 1 gelecek yada 2 daha sonra gelen rastgele sayıyı sonuc değişkenimizde yakaladık if kosul yapımızla sonuc 0 gelirse mesaj kutusunda “Yazı” göstersin dedik ve else durumunda 0 değilse dedik ve mesaj kutumuzda “tura” yazdırdık..

Bir Sonraki Dersde Görüşmek Üzere…

GridView ile DetailsView’i beraber kullanmak

GridView ile DetailsView’i bir arada nasil kullanabiliriz?
Mesela Grid’deki bir kaydi seçince DetailsView’de ayrintilarini nasil gösterebiliriz?

Bunun için iki tane SqlDataSource nesnesine ihtiyacimiz var.
Kolaylik olsun diye ID’lerini <asp:SqlDataSource ID=”SqlDataSourceDetails”…
ve <asp:SqlDataSource ID=”SqlDataSourceGrid”… seklinde degistiriyoruz.

Wizard ile yapmak isteyenler için:

SqlDataSourceGrid nesnesinin üzerine tiklayip “configure data source” diyor ve istedigimiz veritabanindaki lazim olan tabloyu ve verileri seçiyoruz (Örnegin, Northwind – Employees) Bu esnada özel hiç bir islem yapmiyoruz.
Sonra GridView’e gelip az once hazirladigimiz SqlDataSourceGrid nesnesini data source olarak seçiyoruz.

Simdi gelelim DetailsView’e.
SqlDataSourceDetails nesnesine tiklayip “configure data source” diyoruz.
Connectionstring’i seçtikten sonra SqlDataSourceGrid nesnesinde kullandigimiz tablomuzu (Northwind – Employees) ve bütün kayitlarini seçiyoruz.
Ayni sayfanin sag tarafinda WHERE, ORDER BY ve Advanced butonlari var. WHERE diyor ve ayarlari sekildeki gibi yapiyoruz:

Yani, GridView’de seçili olan kaydin ID’sini baz alarak DetailsView’i doldur, demek oluyor.

Kodlarla yapmak isteyenler için:

<asp:SqlDataSource ID=”SqlDataSourceGrid” runat=”server”
ConnectionString=”<%$ ConnectionStrings:Northwind %>”  SelectCommand=”SELECT [LastName], [FirstName], [Title], [EmployeeID] FROM [Employees]”>
</asp:SqlDataSource>

<asp:SqlDataSource ID=”SqlDataSourceDetails” runat=”server” ConnectionString=”<%$ ConnectionStrings:Northwind %>”  SelectCommand=”SELECT * FROM [Employees] WHERE ([EmployeeID] = @EmployeeID)”>

<SelectParameters>
<asp:ControlParameter ControlID=”GridView1″ Name=”EmployeeID”
PropertyName=”SelectedValue” Type=”Int32″ />
</SelectParameters>
</asp:SqlDataSource>

Bunlari yaptiktan söyle bir sonuç elde ederiz: