Arda Çetinkaya Yazılım ve arada kendim ile ilgili karaladıklarım…

Şu sıralar özelleştirilmiş kontroller yaratmakla uğraşıyorum. Bu konu dahilinde bir kaç şey paylaşma gereği duydum. ASP.NET ile özelleştirilmiş kontroller geliştirmek için .NET Framework’ü bize bir çok sınıf ve metod sunuyor. Bundan bahsetmeye gerek yok sanırım. Peki bu sınıfları ve metodları en doğru şekilde nasıl kullanabiliriz?
Özelleştirilmiş bir web kontrolü yaparken, WebControl ve Control sınıflarından türetiyoruz kendi kontrolümüzü. Çünkü default olarak gelen yapılar bunlar. Ancak bazı işlerimizi kolaylaştırmak adına başka sınıflardan da yararlanabiliriz.Bu kısma daha sonra tekrardan değineceğim.
Özelleştirmiş olduğumuz kendi web kontrolümüzü yarattıktan sonra, bu web kontrolümüze,içinde kullanacağımız diğer kontrollerimizi ekleriz; yani genellikle bu şekilde bir yaklaşım olur. Control ağacına, Controls.Add(Control c) şeklinde ekleyeceğimiz kontroller ile kendi özelleştirilmiş kontrolümüze bu diğer kontrolleri eklemiş oluruz. Bu işlemi CreateChildControls() methodunu override ederek yapmak en doğru yaklaşım olacaktır. ASP.NET sayfası çalıştığı zaman belli metodlar belli bir sıra ile çalışır. CreateChildControls()’da bu sırada yer almaktadır ve çalışması gerektiği zaman çalışır. Bu zamanı .NET Framework’ü bildiği için bu görevi tamamen onun üzerine yıkmak, controllerin durumları ve ViewState için en doğru yaklaşım olacaktır.

protected override void CreateChildControls(){
                     Controls.Clear(); //Öncesinde control ağacımızı temizlemekte fayda var.
                     ……… //Diğer kontrolleri yaratabiliriz…
}

Devam…

Microsoft Patterns&Practices ekibi Application Architecture Guideline’nın son versiyonunu yayınladı. .Net ile bir uygulama geliştirirken mimari tasarımlarda nelere dikkat etmek gerekir ve nasıl bir mimari oluşturulmalıdır gibi konuların ele alındığı bu guideline’a http://www.codeplex.com/AppArchGuide adresinden ulaşabilirsiniz. 

Live Write ile WordPress uyumlu calisiyor mu.Ne yazik ki Turkce karakterlerde sorun yasayabiliyorsunuz.Bakiniz bu yazi.

Hevesim kursagimda kaldi. ):

Agile geliştirme yöntemlerinden Scrum ile ilgili 10 dakikalık bu videoyu izlemenizi tavsiye ederim.

10 dakikada Scrum

ViewState kavramı dinamik kontroller yaratırken çok önemlidir. Yaratılan dinamik kontrollerin durumlarını ViewState sayesinde koruyabilir, bu kontroller üzerinde işlemler yaparken ViewState’deki datayı kullanabiliriz.
Ancak bu noktada dinamik olarak yarattığımız ve sayfaya eklediğimiz kontrollerin hiyerarşik yapısından emin olmamız lazım.  Nedir bu yapı peki?
Sayfaya eklediğimiz kontroller, belli bir düzene göre o sayfada yer alır. Bu yapıya Control Tree denir. Dinamik yada statik olarak eklediğimiz kontrollerin bu ağaç yapısındaki yerlerinden biz sorumlu oluruz. Controls.Add(Control c) şeklinde bu kontrol ağacına yeni kontroller ekleyebiliriz. ViewState kavramı bu noktada çok önem kazanıyor. Aşağıdaki gibi bir örnekle bunu açıklamaya çalışacağım.
Şimdi bir tane Button olduğunu farzedelim.Buna basınca yeni 2 tane kontrol ekleyelim.

protected void Button1_Click(object sender, EventArgs e)
{
            TextBox mail = new TextBox();
            this.form1.Controls.Add(mail);

            TextBox phone = new TextBox();
            this.form1.Controls.Add(phone);
}

Bir çoğumuz ilk olarak böyle yapıyoruz eminim ki. Button’a tıkladığımızda sayfa postback olur, ASP.NET Page LifeCycle sırayala çalışır ve son olarak bu event çalışır ve ekranda 2 tane textbox görürüz. Buraya kadar her şey çok güzel. Ancak sayfada başka bir postback olduğunda bu kontrollerin kaybolduğunu ya da durumlarının korunmadığını görürüz.
Ve ilk olarak aklımıza ViewState gelir. Ancak ViewState gelmeden önce kontrol ağacını düşünmemiz gerekir. Çünkü ViewState, kontrol ağacındaki kontrollerin durumundan sorumludur. Kontrol ağacının kendisinden sorumlu değildir. Controls.Add() şeklinde kontrol ağacına eklemediğimiz kontrollerin ViewState’lerini korumamak pek mümkün değildir. Bu durumda 2. bir postback olduğunda kontrol ağacında hiç bir kontrol olmadığı için, kontrollerin ViewState’leri de olmaz.