C# ta Arayüzler (Interface)

29 May 2012


In: .NET FrameWork, Çeşitli

Interfaceler saf abstract sınıflardır. Sadece metod, property ve/veya indexer ların imzalarını barındırırlar. İmplementasyon bulundurmazlar kesinlikle.

Barındırabileği üyeler;
1. Metodlar
2. Property ler
3. Indexer lar
4. Event ler

Barındıramayacağı üyeler;
1. Field lar
2. Constant lar
3. Constructor metodlar
4. Destructor metodlar
5. Operatörler

Arayüz üyeleri kesilikle statik olamazlar. Class lar ve Struct lar çoklu interface kalıtımına izin verirler. Bunun yanısıra bir interface başka bir interface den kalıtım alabilir.

Örnek Kullanım;

public interface IList : ICollection, IEnumerable
{
    int Add(object value);  //method
    bool IsReadOnly{get;}  //property
    object this [int index]{get; set;}  //indexer
}

Implementasyon Örneği;

class MyClass : MyBaseClass, IList, ISerializable
{
    public int Add(object value){...}
    public bool Contains(object value){...}
    public bool IsReadOnly{get{...}}
    public object this [int index]{get{...} set{...}}
}

Bir sınıf sadece ve sadece tek bir sınıftan türetilebilirken, birden fazla interfaceten türetilebilir.
Structlar ise herhangi bir sınıftan türetilemezken birden fazla interfaceten türetilebilirler.

Tüm interface üyeleri türetilen sınıf veya struct ta kalıtım alınmalı veya implemente edilmeli.
Interface üyeleri türetilen sınıfta implemente edilirken override olarak implemente edilemezler.

 

C# ta Member Hiding

23 May 2012


In: .NET FrameWork, Çeşitli, Visual Studio .NET

İki sınıf arasındaki kalıtım yoluyla gelen fonksiyon ve/veya özelliklerin kalıtım alan sınıfta hide (gizlenmesi) edilmesi ihtiyacı olabilir.

Şöyleki;

public class A1
{
    public string Method1()
    {
        return "Hello from a1 - method1";
    }
}

ve  

public class B1
{

}

gibi iki sınıfımı olsun ve B1 sınıfı;

public class B1 : A1
{

}

şeklinde A1 sınıfından kalıtım alsın. B1 sınıfı Kalıtım ile beraber A1 sınıfından Method1() metoduna sahip olacaktır.  Ancak bu metodu B1 sınıfından ihtiyaç dahilinde farklı bir şekilde çağırmamız gerekebilir. Bu gibi durumda kalıtım alan sınıfta

public class B1 : A1
{
    public new string Method1()
    {
        return "Hello from b1 - method1";

    }
}

şeklinde "new" anahtar kelimesiyle yeniden yazdığımızda artık B1 den Method1() i çağırdığımızda B1 deki implementasyonuna erişiyor olacağız.

Peki bu durumda bile A1 sınıfındaki Method1() metoduna erişmek istersek ne yapacağız? Sonuçta kalıtımla her iki sınıftaki Method1() metoduna da sahibiz.

Bu durumda ise;

 

var b1 = new B1();
Console.WriteLine(((A1)b1).Method1());

şeklinde yine B1 sınıfındaki Method1() metıduna A1 deki implementasyonu üzerinden erişmiş oluruz.

 

 

C# ta Kalıtım

21 May 2012


In: .NET FrameWork

class A
{
    int a;
    public A(){...}
    public void F(){...}
}

class B{
     int b;
     public B(){...}
     public void G(){...}
}

Gibi iki sınıfımız olsun. 

B sınıfını A sınıfından 

class B : A{
     int b;
     public B(){...}
     public void G(){...}
}

şeklinde türettiğimizde;

B sınıfı A sınıfından kalıtım olarak F() fonksiyonunu alır. Dikkat edersenizyapıcı method olan A() metodu B sınıfı tarafından kalıtım yoluyla alınamaz. Kalıtım yoluyla alınan metodlarvirtual tanımlanmışlar ise override edilebililer.
Bir sınıf kural olarak sadece başka bir sınıftan kalıtım alabilir. Struct lardan kalıtım alamazlar. Ancak birden fazla interface den türeyebilirler.
Sınıfların aksine Struct lar başka bir tipten kalıtım alamazlar. Ancak yine sınıflar gibi birden fazla interface den türeyebilirler.
Eğer bir sınıf başka bir base sınıftan türemiyorsa "object" tipinden türüyor demektir. (Everything is an object)

Windows 8 ve Windows Store

11 Ara 2011


In: Bilişim, Çeşitli, Visual Studio .NET
Yazılım geliştiriciler için yepyeni bir sayfa açılıyor; Windows 8 ile gelecek yeni Windows Store sayesinde yazılım geliştiriciler uygulamalarını online olarak satabilecekler ve satışlarının ilk başta %70'ini sonrasında satışları 25.000$ rakamını aştığında %80'ini kazanacaklar. Bu yazılım dünyasını yepyeni boyuta taşıyacak değişim dün duyuruldu. Yapılan açıklamayı ve demoyu aşağıdaki videodan izleyebileceğiniz gibi detaylı basın açıklaması bilgisine http://win8.ms/press adresinde de erişebilirsiniz.

Ayrıca önemli bir diğer nokta Windows Store Türkçe olarak Türk Lirası ile ödeme yapılacak şekilde Türkiye pazarında olacak; detaylar için http://msdn.microsoft.com/​en-us/library/windows/apps/​hh694064.aspx adresini inceleyebilirsiniz.

Kaynak : http://www.nuricankaya.com

En İyi Kod Olmayan Koddur

20 Eki 2011


In: .NET FrameWork, Çeşitli, Visual Studio .NET

Okuduğum bir makale de şöyle diyordu; (Code is our enemy)

"Code is bad. It rots. It requires periodic maintenance. It has bugs that need to be found. New features mean old code has to be adapted. The more code you have, the more places there are for bugs to hide. The longer checkouts or compiles take. The longer it takes a new employee to make sense of your system. If you have to refactor there's more stuff to move around.

Code is produced by engineers. To make more code requires more engineers. Engineers have n^2 communication costs, and all that code they add to the system, while expanding its capability, also increases a whole basket of costs. You should do whatever possible to increase the productivity of individual programmers in terms of the expressive power of the code they write. Less code to do the same thing (and possibly better). Less programmers to hire. Less organizational communication costs." 

Hepimizin başına gelmiştir. Yazdığımız projeler büyüdükçe yaptığımız işler de artmaya başlar. Aslında yaptığımız işlerin büyük bir çoğunluğu yeni işin değildir. Yeni iş için yazdığımız kodların önceden yazılmış olan kodlarla olan entegrasyonları ve çıkan bugların düzeltilmesidir. Aslında sorun kodlar da değildir. Sorun ne mi diyorsunuz? Aynaya bakmamız yeterli olacaktır.

 Tabiki hepimiz (yazılımcılar) iyi niyetliyiz. Yaptığımız işi seviyoruz. Bir çok problemle saatlerce uğraşıp kafa patlatırız. Uykusuz kalırız. Saatlerce kod yazarız. Ancak çok kod yazmaya olan eğilimimizi dizginlemeliyiz.  

Yazılımcı olmanın doğası gereği aslında verdiğimiz her karar bir trade-off tur. İyi bir yazılımcı olmak için bu trade-off ları iyi anlamamız ve yazdığımız herşeyde bu bilinçle hareket etmemiz lazım.

Yazılmış bir kodu bir çok yönden değerlendirebilirsini;

1. Kısalığı
2. Sahip olduğu özellikler
3. Hızlı işlemesi
4. Kodlamada harcanan zaman
5. Güçlülüğü
6. Esnekliği

Yukarıdaki değerlendirme durumlarının aslında her birinin bir diğerine muhalefeti vardır.
Örneğin; çok rutin bir işi yazmak için 3 gün harcadığınızı düşünün. yukarıdaki maddelerden 2 ve 3 numaralı şartları çok iyi sağlarsınız. Ancak 4. maddeyi kesinlikle sağlayamamış olursunuz. Sonuçta rutin bir iş için 3 gün harcadınız. 

Peki buna değer mi? Bu kararları nasıl alırız? Cevap bilinçlı olmak, kodları mümkün olduğunca basit tutmaktır. 

Kod yazmayı ne kadar severseniz sevin, en iyi kod olmayan koddur. Mümkün olduğu kadar basit tutmaya çalışın kodlarınızı. 

Kararsız kaldığınız anlarda....

4 Eyl 2011


In: Çeşitli, YorUmSUz_
Yeni bir fikriniz mi var? Bir şeyi yapıp yapmamakta kararsız mı kaldınız? o zaman bu linke mutlaka tıklamalısınız... Wink

JQuery Denemeleri - II (JQuery Neler Yapabilir?)

12 Haz 2010


In: AJAX, ASP.NET

JQuery kütüphanesi; web programlama için genel amaçlı ara bir katman oluşturur. Bu katman sayesinde neredeyse her türlü duruma uyan scriptler yazabiliriz. JQuery kütüphanesinin genişleyebilir bir yapısı vardır. Üzerine plug-in ler yazılabilir. İnternet üzerinde ve official sitesinde yazılmış plug-in lere kolayca ulaşabilirsiniz. Hatta kendi plug-in inizi bile yazabilirsiniz.

İşte JQuery' nin kabiliyetlerinden bazıları:

1. Sayfa Elemanlarına Ulaşım : JavaScript kütüphanesi olmadan DOM (Document Object Model) ağacı üzerinde veya HTML dökümanı üzerinde işlem yapmak için satırlarca kod yazmamız gerekir. JQuery tam da burada hızlı ve etkili bir çözümü olan "Seçiciler" (Selectors) mekanizmasını sunar. Seçiciler mekanizması ile HTML elementlerine hızlı ve kolay bir şekilde ulaşabiliriz.

2. Sayfa Görünümünü Değiştirme : CSS sayfa stilleme işinde inanılmaz ve güçlü metodlar sunar. Fakat tarayıcıların tüm standartları desteklemediği zamanlarda CSS de yetersiz kalır. CSS in yarattığı bu boşluğu JQuery, tüm tarayıcıların desteklediği standartlarıyla gayet güzel bir şekilde doldurur. Buna ek olarak, sayfamız render edildikten sonra JQuery ile CSS classlarını ve inline yazılmış style ları değiştirebiliriz.

3. Sayfa İçeriğini Değiştirme : JQuery nin sayfa üzerinde yapabildikleri sadece class ve style değiştirmekle sınırlı değil. JQuery ile bir kaç tuşla sayfamızda istediğimiz içeriği de değiştirebiliriz. Sayfamızdaki yazıları değiştirebiliriz. İstediğimiz yere yeni HTML elementleri insert edebiliriz, imajları değiştirebiliriz, elementlerimizin yerini değiştirebiliriz, hatta sayfamızdan eleman bile kaldırabiliriz.

4. Sayfa Animasyonları : Sayfamızdaki kontrollere fadeIn, fadeOut veya wipe efektleri verebiliriz.

5. Sayfa yenilemesi olmadan Sunucudan veri alma : Diğer bir deyişle AJAX (Asynchronous Javascript and XML) işlemleri yapabiliriz.

6. Genel JavaScript işlerini basitleştirme : Javacsript ile sıklıkla yaptığımız işleri (döngüler, dizi işlemleri vb.) daha basite indirger.

Bu saydığımız maddeler dışında tabiki onlarca özellik sayılabilir. JQuery denizine girdikçe görebileceğimiz bir çok özellik mevcut. Özellikle giriş bölümünde bahsettiğimiz plug-in olayı zaten başlı başına bir derya. Bu plug-in ler bizim hayal gücümüzle sınırlı sadece. Başka bir sınırı yok.

Şimdili bu kadar, diğer yazılarda görüşmek üzere

JQuery Denemeleri - I (Write Less, Do More)

7 Haz 2010


In: ASP.NET, Çeşitli, Internet

JQuery bir JavaScript kütüphanesidir en kısa tanımıyla. Ancak başlıktaki sloganından da anlaşılabileceği gibi; az kodla çok iş yapmamıza yardımcı olan bir kütüphanedir. Aynı  zamada HTML dökümanı içerisinde istediğimiz gibi dolaşmamıza, form efektlerine, AJAX vb. işlemlere izin vererek hızlı kod geliştirme yapmamızı sağlar.

Kullanım Şekli:
Kullanımı gayet basittir. JQuery bir JS dosyasıdır. JS dosyalarını nasıl kod geliştirme ortamımıza include ediyorsak aynı şekilde JQuery dosyamızı kod geliştirme ortamımıza ekledikten sonra JQuery'nin nimetlerinden faydalanmaya başlayabiliriz.
Örnek : <script src="Scripts/jquery-1.3.2.js" type="text/javascript"></script>

Nasıl Temin Edebilirim?
http://jquery.com/ adresinde JQuery nin son sürümünü ister Development, ister Production tipinde indirebilirsiniz.

Kullanıma başlamak bu kadar basit. Gelecek yazı serilerinde JQuery denizine dalıyor olacağız. 

Detaylı Bilgi için http://jquery.com/ adresini ziyaret edebilirsiniz.

Yedek Almanın Önemi

27 Nis 2010


In: Çeşitli, Internet, YorUmSUz_

İnternet üzerinde iş yapıyorsanız, ya da internette işinize yarayan birşeyleriniz (dosya, döküman vb.) var ise yedekleme yapmak hayati önem taşıyor.

Nereden çıktı şimdi bu yedek olay??? Şöyleki hosting sürem dolmuş ve bende nasıl olduysa işlerin yoğunlukğundan olacak atlamışım yenilemeyi, bir gün sitemi bir açtım o da nesi :))) site mite yok ortada... O zaman jeton düştü benim. Hemen hostingi yeniledim ama geçmiş olsun, siteye yazdığım yazıların son hali maalesef ne ben de var, ne de hosting hizmeti aldığım şirkette. Hosting hizmeti aldığım şirketin sahibi Allahtan arkadaşım da bana dosyalarımı gönderdi. Ama onlarda ara ara yedek alıyorlarmış. Yine tüm dosyalarıma ulaşamadım yani.

Sitede maalasef son 2 ayda yazmış olduğum yazılar yok. Şimdi artık daha temkinli davranıp önce local de çalışıp sonra siteye atıyorum :)

Siz siz olun internette yedeksiz çalışmayın. 

Bir İşletim Sistemi Olarak Kadınlar :)

25 Haz 2009


In: YorUmSUz_

Kadınları işletim sistemine benzetirsek bakın nasıl ilginç sonuçlar ve tespitler çıkıyor? :)

1. Çoklu oturumu olmayanı tercih sebebi olan sistem

2. Sık sık aşağıdaki hata mesajlarını verecek işletim sistemi:
    - vahim hata! lütfen sistem sağlayıcınızla irtibata geçin.
    - periyodum geldi, işleminizi gerçekleştiremiyorum.
    - kadınları_anlamak.dll dosyasına ulaşılamıyor. kendiniz bulmak ister misiniz? (yok ben almayayım)
    - ne zamandır beraberiz, bi komplimanını görmedik!

3. Halâ "press play on tape" yazanları makbuldur

4. User Friendly olanları tercih sebebidir

5. Hayatımızın vazgeçilmezleri arasında olmasından dolayı, çok mühimdir.hatasızı aranmalıdır ama bulunamaz çünkü hatasızı yoktur.

6. Her ne kadar service pack ve patch uygulanırsa uygulansın mutlaka bir yerlerinde bug vardır.

7. Bios pili olarak alış - veriş; ekran koruyucu olarak rimellerini kullanan kadındır.

8. Çok gergin bir kavga sonrası barıştıktan sonra;
    "Sistem çok ciddi bir hatadan kurtarıldı." mesajını verirler.

9. Her an hata verme yeteneğine sahip, kendisiyle birlikte sizinde çökmenize neden olabilecek, genelde kullanışlı, arada format atılması gerekli olan kadın tipidir.

alıntı : http://www.itusozluk.com/goster.php/bir+i%FEletim+sistemi+olarak+kad%FDn

 

Windows Vista' nın Kaynak Kodları :)

24 Haz 2009


In: YorUmSUz_

Windows Vista' nın kaynak kodları artık internette dolaşır oldu :)

#include

class WindowsVista extends WindowsXP implements Nothing
{
     boolean beta = true;

     WindowsVista()
     {
          checkIfHardwareIsCompatible();
          /** Ok. The idiot seems to have some high end hardware.
           * Lets make his life miserable
           */
        
          runInternetExplorer7();
     }

     void checkIfHardwareIsCompatible()
     {
     /*
     * Lets make sure that half the world cannot run this OS while
     * we fix all the bugs
     */
          if((installedRam < 2GB) && (processorSpeed < 4GHz))
          {
MessageBox("Your System does not seem to be capable of running zero err.. aero glass and the like. Please grade the hardware and try again.");
               WaitTillPoorGuyReadsTheMessage();
               bsod();
          }
     }

     void runInternetExplorer7()
     {
          IE7 ie7 = new IE7();
        
          ie7.featureSet = firefox_features
               + safari_features
               + opera_features + lot_of_bugs;
        
          ie7.run();
          WaitWhileThePoorGuyLooksAtTheNewInterface();
          bsod();

     }

     /**
      * return true when product is stable.
      */
     boolean isReadyForRelease()
     {
          int lastReportedNumberOfBugs = 3457888E+08
          int totalNoOfNewFeatures = 600;
          boolean readyForRelease = false;

          sendFeatureSetToMarketingGuys();

          while (marketingGuysAreAtIt)
          {
               Thread fixBugsWhileInBeta = new fixBugsWhileInBeta();

               fixBugsWhileInBeta.assignProgrammer(oneBug);
               fixBugsWhileInBeta.start();

               if(programmersAreNotSufficient)             
               {
                    hireFromXBOXDivision();
               }

               if(aMonthHasPassed)
               {
announce("Windows Vista Consumer Version Will be delayed by one more month");
                    dropAFewFeatures();
                    totalNoOfNewFeatures = totalNoOfNewFeatures – 10;
               }

/** Boss strictly told me that we should have no more than * 7000 bugs
               * when we ship the item
               */
               if(lastReportedNumberOfBugs– == 7000)
                    return true;

          }
     }

     int main(void)
     {
          WindowsVista vista = new WindowsVista();
          vista.runWindowsXP();
          return plentyOfMoneyforBilly;
     }
}

Windows' a Fing attırın :)

18 Nis 2009


In: .NET FrameWork, Çeşitli

Bazen işletim sistemimizi herhangi bir nedenle yeniden başlatmak veya kapatmak isteriz. (Örneğin bir program kurduğumuz zaman.) Bu işlemi Başlat > Bilgisayarı Kapat adımlarını izleyerek çok kolay bir şekilde yapabiliyoruz. Peki bu ihtiyaca bir program yazarken ihtiyaç duyarsak ne olacak? Veya geçenlerde benim içine düştüğüm bir duruma düşerseniz ne olacak :)

Geçen gece bilgisayarımda biraz uzun sürecek bir işlem yapıyordum. Büyük bir çoğunluğu bitmişti ki işin uyku bastırdı :). Şimdi bilgisayarı kapatsam yaptığım iş boşa gidecek ve yeniden yapıp zaman kaybedeceğim, bitmesini beklesem hiç olmayacak....  bende o kadar yapılan işi boşa atmak istemedim, ne yapabilirim diye düşündüm aklıma .NET in nimetlerinden olan System.Management namespace i altındaki WMI sınıfları geldi. Daha önce bu sınıfları araştırmamıştım ama bir iki dakikalık araştırmadan sonra implementasyonunun hiç de kolay olmadığını gördüm. Araştırmaya bir kaç dakika daha devam edince çok kullanışlı ve implementasyonu tek satır olacak şekilde yazılmış bi sınıf buldum. Bu sınıfı sizinle paylaşmak istedim. Daha önce ihtiyacı olanlar mutlaka ulaşmışlardır zaten bu sınıfa. Yeni  araştıranlar  için belki yardımcı olur diye paylaşmak istedim. Sınıfın kaynak kodlarına ve yardım dosyalarına aşağıdaki linkten ulaşabilirsiniz. Sınıfın kullanım şeklini ise yine aşağıda görebilirsiniz.

Sınıfın Kaynak Kodları : 
WindowsController.zip (33,94 kb)

Sınıfın Kullanım Şekli:
Yukarıda bulunan dosyadaki WindowsController.cs sınıfını projenize ekledikten sonra;

WindowsController
.ExitWindows(RestartOptions.Hibernate, true
);
WindowsController.ExitWindows(RestartOptions.LogOff, true
);
WindowsController.ExitWindows(RestartOptions.PowerOff, true
);
WindowsController.ExitWindows(RestartOptions.Reboot, true
);
WindowsController.ExitWindows(RestartOptions.ShutDown, true
);
WindowsController.ExitWindows(RestartOptions.Suspend, true);

seçeneklerinden birini kullanarak windowsa istediğiniz gibi fing attırabilirsiniz :). Yukarıdaki seçenekleri denemek bayaa bir zamanımı aldı, malum bilgisayarın kapanıp açılması felan zaman alıyor biraz :)

Buradan çıkaracağımız ders : Bir çok gelişme ve/veya araştırma zor durumda kalma, ÜŞENME veya ihtiyaçtan doğar :))))

Geniş bilgi için http://www.mentalis.org/soft/class.qpx?id=7 adresini ziyaret edebilirsiniz.

INETA NEXT HIT

8 Nis 2009


In: Seminer&Duyuru

Yazılım dünyasının bir sonraki adımına göz atılacak olan etkinlik 11-12 Nisan tarihlerinde Yıldız Teknik Üniversitesi Oditoryum'unda yapılacak. Kayıt işlemleri için http://www.inetatr.org/ adresini kullanabilirsini. Aşağıdaki afişe göre çok verimli ve güzel bir hafta sonu olacak gibi :)

IT dünyasında işler nasıl yürür? :)

27 Şub 2009


In: YorUmSUz_

- IT'cinin bir iş için verdiği zamanı direkt ikiye bölün, sizin tespit
ettiğiniz süre bittikten sonra da bikbiklamaya başlayın "niye bitmedi"

diye, bu şekilde IT'ci daha efektif olarak çalışacaktır...

 - IT'ciye brief olarak sadece "abi bi online alışveriş sitesi yapıcaz, işte
bi anasayfa, ürün sayfaları bi de arama sayfaları olacak" deyin ve

karşılığında da "17 gün" gibi kesin bir süre vermesini isteyin, veremiyorsa

ona tahammülsüz biri olduğunu söyleyin, bu da IT'cilere her zaman

söylemeniz gereken daha binbir türlü kötü anlamlı kelime gibi, onu,

motivasyonunu en yüksek seviyede tutarak yapacağı işler için

kamçılayacaktır...

- "select * from" repliğini, "table" ve "field" kelimelerini ezberleyin,
IT'ci yapmasını istediğiniz bir işin zor olduğunu veya vakit alacağını

belirtirse "aman canım" ile başlayan "alt tarafı bi select * from

yapacaksın" veya "alt tarafı table'a bi field daha ekleyeceksin" şeklinde

itiraz edin, IT'ci tabi ki işten kaytarmaya çalışacaktır...

- IT'ciler genel olarak yalancıdır, bunu kendi suratlarına da söyleyin,
motivasyonu düşürmemek lazım...

- verdiğiniz her türlü işte brief'te söylemeyi unuttuğunuz konular
IT'cilerin hatırlama/düşünme zorunlulukları içerisindedir, o sebepten

bunları dert etmeyin, üstelik IT'ci bunları yapmayı unuttuğu takdirde ona

kızabilirsiniz de, size o konuyu daha önce belirtmediğiniz ifade edilirse

"ama bu her yerde böyle, sen nasıl düşünemedin ki" şeklinde cevap verin, o

kadar para alıyor o düşünmeyecek de kim düşünecek?

- evet, IT'ciler çok para alıyorlardır, ondan 3-4 kat fazla para alan bir
müdür dahi olsanız batsın bu size, işi bütün gün masasının başında

bilgisayarında oyun oynamak olan birine bu kadar da fazla para verilir mi

canım?
- yine herhangi bir itiraz anında "IT'ci değil misin, yapacaksın" cümlesi
final noktadır, hiçbir IT'ci buna dayanamaz ve ne isterseniz

yapacaktırlar...

- IT'cinin yaptığı işte bir sorunla ilk defa karşılaşıyor olsanız bile "abi
ara sıra oluyor ya hede problemi ben dün yine karşılaştım" şeklinde iletin

ve IT'cinin zıvanadan çıkışını izleyin, çok komik oluyorlar...
- "olmaz" veya "yapılamaz" cevaplarını kesinlikle kabul etmeyin, bölüm
müdürünüzün hatta genel müdürünüzün cc'de olduğu bir maille kendisini

uyarın hatta ultimatom verin...

- IT'cinin mesaisi en az 10 saattir, dolayısı ile mesai saatleri dışında da
şirkette olması gerekir, kaytarmasına izin vermeyin, günde 12 saatten az

çalışan bir IT'ciye prim de vermeyin, zaten .ok gibi maaş alıyorlar, bir de

prim mi verilirmiş...

ASPNET State (Durum) Yönetimi Part II

22 Eki 2008


In: .NET FrameWork, ASP.NET, Visual Studio .NET

Bir önceki yazımda ASP.NET State Management konusunun Client tarafındaki yönetim araçlarını incelemiştik. Bu yazımda ise Server taraflı yönetim araçlarına değiniyor olacağım.

Server taraflı ASP.NET durum yönetim seçenekleri, Client taraflı olanlara nazaran sayfa bilgilerimizi daha güvenli bir ortamda saklarlar. Ancak sunucu taraflı oldukları için tabiki sunucumuzun kaynaklarını kullanırlar.

ASP.NET in bize sunduğu Server taraflı State Management seçeneklerinden önemli olanları şöyledir;

  • Application State
  • Session State

Şimdi bu seçenekleri teker teker incelemeye çalışalım

Application State

Application State HttpApplicationState sınıfı üzerinden web uygulamalarımızda değerler saklamamıza imkan sağlar. Application state e web uygulamamızdaki tüm sayfalar ulaşabilir.  Application state key/value mantığıyla çalışır. Veriler uygulama bazında dictionary mantığıyla saklanır.

Kullanımı:
Application.Add("[Key]", ["Value"]);

Veri Alma işlemi:
string value = Application["Key"].ToString();

Bu yöntemi kullanmanın avanyajları:

  1. Kolay kullanım : key/value mantığıyla çalıştığı için kullanımı basittir
  2. Uygulama Alanı genişliği : Application state e web uygulamamızın tüm sayfaları erişebildiği için uygulama bazında yönetim sağlar

Dejavantajları:

  1. Uygulama Alanı genişliği : Uygulama alanı genişliği dikkatli kullanılmadığı takdirde bir dejavantaj olarak ta karşımıza çıkabilir. Şöyle ki : Uygulama bazındaki tüm sayfaların Application State e erişim hakkı olduğu için, bir sayfadaki kodun değiştirdiği Application State değeri, başka bir sayfadakiyle aynı olmayabilir. Dolayısıyla veri tutarsızlığına neden olabilir.
  2. Data devamlılığı limiti : Application state sunucumuz update olduğunda, yeniden başlatıldığında veya çöktüğünde kaybolacağı için Application state te tutulan veriler de kaybolacaktır
  3. Kaynak gereksinimi : Application state sunucu taraflı bir durum kontrol seçeneği olduğu için sunucumuzun kaynaklarını tüketecektir.

 

Session State

Session State yapısı da Application Satate e benzer. Ancak uygulama genelinde değil de o an uygulamamızı çalıştıran tarayıcı kapsamında veri tutmamıza olanak sağlar. Uygulamamızı çalıştıran her bir tarayıcının session değeri farklı olacaktır. Hatta aynı kullanıcı uygulamamızı çalıtırıp, daha sonra uygulamayı kapatıp tekrar uygulamamızı çalıştırsa yine session değerleri farklı olacaktır. Session State HttpSessionState sınıfının bir örneğidir. Application State gibi key/value yapısıyla çalışır. Session a eklenen veriler artık sunucu tarafından yönetilirler.

Kullanımı:
Session.Add("UserName", "Muammer"); //string türünde key alırken, object türünde value kabul eder. Bu da saklayabildiğimiz verilerin çok çeşitli olabileceği anlamına gelir.
//veya
Session["UserName"] = "Muammer";

Veri Alma İşlemi
string value = Session["UserName"].ToString();

Bu yöntemi kullanmanın avantajları:

  1. Kolay kullanım : key/value mantığıyla çalıştığı için kullanımı basittir
  2. Oturuma özel uygulama : her bir oturum için farklı değere sahip olduğu için uygulamamız tarafından Session değerlerinin yönetimi kolaydır.
  3. Veri bütünlülüğü : oturuma özel olduğu için IIS imiz restart olsa bile verilerimiz saklanmaya devam eder ve verilerimizi kaybetmeyiz.

Dezavantajları:

  1. Performans : Session değerleri sunucumuzun Ram inde saklandığı için performans açısından kullanırken dikkatli olmalıyız.

 

Bu iki makale ile ASP.NET State Management konusuna değinmeye çalıştık. Umarım yardımcı olabilmişimdir. Konu ile alakalı daha geniş bilgi sahibi olmak isteyenler MSDN in sayfasından daha geniş bilgi edinebilirler.

ASP.NET State (Durum) Yönetimi - Part I

13 Eki 2008


In: .NET FrameWork, ASP.NET, Visual Studio .NET

Web ortamında sayfaların her post-back olmasında ilgili sayfanın yeni bir örneği oluşturulur. Peki yeni bir örneğinin oluşması ne demek?

  1. Sayfamızdaki bilgilerin
  2. Sayfadaki kontrollerin (TextBox, Grid, CheckBox, Button vb.)

tamamen keybolması demektir. Örneğin kullanıcı sayfamızdaki bir TextBox a veri girdiğinde, artık biliyoruz ki bu veri tamamen kaybolacaktır. Ancak bunu deneyip yaptığımızda gerçek ortamda TextBox taki verinin kaybolmadığını görüyoruz.

Peki bu nasıl oluyor?

Geleneksel Web Programlamanın bu sınırlılığının üstesinden gelmek için .NET platformu bize bazı sayfa-tabanlı ve uygulama-tabanlı seçenekleri sunmakta. Bunlar:

  1. View State
  2. Control State
  3. Hidden Fields
  4. Cookies
  5. Query Strings
  6. Application State
  7. Session State 

Bu seçeneklerden (View State, Control State, Hidden Fields, Cookies ve Query Strings) sayfamızdaki bilgileri ve kontrol bilgileri bir takım yollarla kullanıcının kendi bilgisayarında (Client-Based State Manegement) saklarlar. Geri kalan seçenekler ise (Application State, Session State ve Profile Property) bu bilgileri uygulama tarafında yani sunucuda (Server-Based State Management) saklarlar.

.NET platformunun bizlere sunduğu bu seçenekleri incelersek:

View State

Post-Back sırasında default olarak sayfa ve kontrol bilgilerini tutan bu yapı, dictionary mantığıyla çalışır. Her bir kontrolün ve sayfa bilgisinin değerleri "Key", "Value" şeklinde, hidden field lar olarak korunur. sayfa sunucuya gönderildiğinde,gelen isteğe göre işlem yapıldıkran sonra sunucu view-state değerine göre sayfayı tekrardan render eder ve client a tekrar gönderir. Böylece sayfamızdaki verilerimizi kaybetmemiş ve sunucuya gitmeden önceki halleriyle tekrar tarayıcımızda görürüz.

View state yapısında kendi verilerimizide saklayabiliriz. Dictionar mantığıyla çalıştığını daha önce belirtmiştik. Aşağıdaki gibi basit bir şekilde View State yapısını kullanabilirsiniz

View State e veri ekleme:
ViewState.Add("[Key]","[Value]");

Eklenen bir veriyi alma:
ViewState["[Key]"].ToString();

Bu yöntemi kullanmanın avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Kolay uygulanabilirlik : Ekstra kodlama gerektirmez. Zaten default olarak kullanılan metoddur
  3. Güvenlik : View-State değerleri şifrelenmiş bir şekilde saklandıkları için Hidden field lara göre daha güvenlidirler

Dezavantajları:

  1. Performans düşüklüğü : View-State değerleri sayfamızla beraber sunucuya gittiği için view-state de büyük boyutta veri saklamak sunucuya gidiş-geliş süresini uzatacaktır. özellikle mobil uygulamalarda büyük veriler büyük performans kaybı demektir.
  2. Potansiyel Güvenlik Riski : Veriler şifrelenmiş bir şekilde saklansa bile sayfa kaynağını görüntülediğimizde bu verileri şifreli halde bile olsa görebiliriz. Bu durum güvenlik riski oluşturabilir.

Control State

.NET ControlState özelliği post-back ler arasında custom kontrol verilerini tutmamıza olanak sağlar. Örneğin sayfamızda farklı içerikler gösteren farklı tab yapılarımızın olduğunu düşünün. Hangi tabın seçili olduğunu post-back işleminden önce bilmek istiyorsak bu yapı uygun bir yapıdır. Bu senaryo ViewState ile de yapılabilir, ancak ViewState sayfa bazında kapatılabildiği için uygulamamızda aksaklıklara neden olabilir. ControlState ise ViewState gibi kapatılamaz.

peki nasıl kullanılır?

Veri ekleme:
PageStatePersister.ControlState = "[Data]";  //(veri object türünde eklenebilir)

Veri alma:
string value = PageStatePersister.ControlState.ToString();

Kullanım Avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Güvenilirlik : ViewState gibi kapatılamadığından kullanımı daha kesin sonuçlar verir.
  3. Çok Yönlülük : Control state tekli verilerin nasıl ve nerede saklanması konusunda custom adaptörler yazılabilir

Dezavantajları:

  1. Programlama bilgisi gerektirir : ASP.NET kullanım için limitli imkan sağlasa da, tam kullanım için kodlama gerektirmektedir.

Hidden Fields

Hemen hemen hepimizin bildiği bir state yönetim aracıdır. Normal bir HTML kontrolü olarak sayfamıza ekleyenilirsiniz. Veri saklama ve veri alma, normal bir TextBox tan farksızdır.

Kullanım avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Yaygın Destek : Hemen hemen tüm tarayıcılar hidden field desteği vermektedir.
  3. Kullanım kolaylığı : Standart HTML kontrolü olarak sayfanıza ekleyebilirsiniz.

Dezavantajları:

  1. Güvenlik Riski : Sayfa kaynağı direkt olarak görüntülenirse hidden field değerleri açıkça görülebilir. Değerler şifrelenebilir ancak şifrelenmesi ve şifrelerin tekrar çözülmesi işlemi ekstra kodlama demektir.
  2. Basit Depolama Mantığı : Hidden field larda rich değerler saklayamayız. Daha çok basit veriler saklanması için tasarlanmıştır.
  3. Performans Kaybı : Büyük veriler saklayamadığımız gibi, aşırı kullanımı durumunda sayfada HTML kontrolü olarak saklandığı için performans kayıplarına neden olacaktır

Cookies (Çerezler)

Uygulamamızda sıklıkla değişen verilerin Client taraflı saklanmasında en çok kullanılan state yönetim aracıdır. En çok karşımıza çıkan senaryosu ise bildiğimiz gibi Login işlemlerinde kullanıcıyı hatırlamaktır.

Kullanımı:

HttpCookie cookie = new HttpCookie("myCookie");
cookie.Values.Add("UserName", UserName);
cookie.Values.Add("Password", Password);
cookie.Expires = DateTime.Now.AddDays(30); //Cookie nin zaman aşımına uğrama süresi
Response.Cookies.Add(cookie);

Veri Okuma:

if (Request.Cookies["myCookie"] != null)
{
string UserName = Request.Cookies["myCookie"].Values["UserName"].ToString();
string Pwd = Request.Cookies["myCookie"].Values["Password"].ToString();
}

Kullanım Avantajları:

  1. Konfigüre Edilebilme : Cookie lerin ayarlanabilir birçok özelliği vardır. isim, değer, zaman aşımı süresi vb.
  2. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  3. Veri Devamlılığı : Client bilgisayarlarda veri bütünlülüğünü en yüksek oranda garanti edebilen yapılardır.
  4. Kullanım kolaylığı : text tabanlı key-value mantığıyla çalışırlar

Dezavantajları :

  1. Boyut limiti : Bir çok browser cookie boyutu olarak 4096 byte sınırını getirmektedir.
  2. Kullanıcı Kontrolü : Bazı kullanıcılar cookie alımını tarayıcılarından kapatabilirler, bu da cookie kullanımını olanaksız hale getirir
  3. Güvenlik Riski : Cookie kullanıcılar tarafından görülebilmektedir. Bu da güvenlik açıklarına neden olabilir. Cookie değerleri manuel olarak şifrelenebilir, ancak bu da ekstra kod demektir

Query Strings

Query String lerde yine en çok aşina olduğumuz state yönetim araçlarındandır. URL lerin ardına eklenen kullanıcılar için çok da bir anlam ifade etmeyen, yazılımcılar için anlamlı bilgilerdir.

Örneğin : http://www.projegrubu.net/index.php?option=com_comprofiler&task=userProfile&user=142 adresindeki "?" işaretinden sonra gelen
"option", "task" ve "user" kelimeleri birer Query String anatarlarıdır. Bu anahtarlar kullanıcılar için fazla bir anlam ifade etmez ancak yazılımcılar için çok anlamlıdırlar.

 Kullanımı :

http://www.projegrubu.net/index.php?option=com_comprofiler

Her iki kullanımda aynı işi görmektedir.

Veri Alma:

if (Request["[Key]"] != null)
{
string value = Request["[Key]"].ToString();
}

 Kullanım Avantajları:

  1. Sunucu kaynaklarını yormaz : Client-Based olduğu için sunucumuza artı bir yük getirmez
  2. Yaygın Destek : Hemen hemen tüm tarayıcıların Query String iler veri taşıma desteği vardır.

Dezavantajları:

  1. Güvenlik Riski : Query String ile taşınan veriler clear text olarak tüm kullanacılar tarafından görülebilmektedir. Bu nedenle değerli veriler kesinlikle query string ile taşınmamalıdır. Bunun yerine Hidden field veya diğer yapılar kullanılabilir.
  2. Kapasite Limiti : Bazı tarayıcılar URL uzunluklarını en fazla 2083 karakter olarak sınırladıklarından istenilen uzunlukta veri taşınamıyor.

 

Böylece ASP.NET State (Durum) yönetiminin Client tarafındaki yapılarını incelemiş olduk. Umarım yardımcı olabilmişimdir. Diğer yazımda Server tarafındaki yapılara göz atıyor olacağız.

 

Microsoft Enterprise Library 3.1 - Data Access Application Blog (Part 2)

7 Eki 2008


In: .NET FrameWork, ASP.NET, Visual Studio .NET

Daha önceki yazımda Data Access Application Blog' un genel yapısından ve projemize entegrasyonunun nasıl yapıldığından bahsetmiştim. Bu yazımda ise genel CRUD (Create, Read, Update, Delete) işlemlerine değineceğim.

Öncelikle Read işlemiyle başlayalım. Veri tabanından veri okurken genel olarak ya inline SQL cümlelerini kullanırız veya Stored Procedure leri kullanırız. Bu iki yöntemi kullanırken de her zaman tüm verileri çekemeyiz. Bazen parametre geçerek istediğimiz verileri almak isteyebiliriz. Bu durumları simüle eden kod parçalarına aşağıda görebilirsiniz. 

1. Read işlemi; 

//DataSet doldurma işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
GridView1.DataSource = db.ExecuteDataSet(CommandType.Text, "select * from [TableName]");
GridView1.DataBind();

//inline SQL cümlesine parametre geçerek veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("SELECT * FROM [TableName] WHERE [ColumnName]=@[ParamName]");
db.AddInParameter(cmd, "@AdminId", DbType.Int32, 5);
GridView1.DataSource = db.ExecuteDataSet(cmd);
GridView1.DataBind();


//Stored procedure ile veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
GridView1.DataSource = db.ExecuteDataSet(CommandType.StoredProcedure, "[sp_Name]");
GridView1.DataBind();

//Stored procedure e parametre geçerek veri çekme işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetStoredProcCommand("[sp_Name]");
db.AddInParameter(cmd, "@[ParamName]", DbType.Int32, 5);
GridView1.DataSource = db.ExecuteDataSet(cmd);
GridView1.DataBind();

2. Create işlemi;

Create veya insert işlemi ihtiyacımıza göre değişiklik gösterdiği için genel olarak mantığı aşağıdaki gibidir;
//inline SQL cümlesine parametre geçerek insert işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("insert into [TableName]([ColumnName]) values(@[ParamName])");
db.AddInParameter(cmd, "@[ParamName]", DbType.String, "[Param value]");
db.ExecuteNonQuery(cmd);

//stored procedure e parametre geçerek insert işlemi yaptıktan sonra output parametremiz varsa aşağıdaki şekilde output parametremizin değerini alabiliriz
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetStoredProcCommand("[sp_Name]");
db.AddInParameter(cmd, "@[ParamName]", DbType.String, "[paramValue]");
db.AddOutParameter(cmd, "@[OutParamName]", DbType.Int32, 4);
db.ExecuteNonQuery(cmd);
lblMessage.Text = cmd.Parameters["@[OutParamName]"].Value.ToString();

3. Update işlemi;

//inline SQL cümlesine parametre geçerek update işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("update [TableName] set [ColumnName]=@[param1] WHERE [ColumnName]=@[param2]");
db.AddInParameter(cmd, "@[param1]", DbType.String, "[param1 value]");
db.AddInParameter(cmd, "@[param2]", DbType.Int32, [param2 value]);
db.ExecuteNonQuery(cmd);

4. Delete işlemi;

//inline SQL cümlesine parametre geçerek delete işlemi
Database db = DatabaseFactory.CreateDatabase("[ConnStr]");
DbCommand cmd = db.GetSqlStringCommand("delete from [TableName] WHERE [ColumnName]=@[param1]");
db.AddInParameter(cmd, "@[param1]", DbType.Int32, [param1 value]);
db.ExecuteNonQuery(cmd);

Genel CRUD işlmleri bu şekildedir. İhtiyacımıza göre bu yapıları esnetebiliriz tabiki. Umarım yardımcı olabilmişimdir.

Kolay gelsin.

Microsoft Enterprise Library 3.1 - Data Access Application Blog (Part 1)

22 Eyl 2008


In: .NET FrameWork, ASP.NET, Visual Studio .NET

Bu ve bundan sonraki birkeç yazımda Microsoft Enterprise Library 3.1 Bloglarını teker teker ele almaya çalışacağım. Daha önceki yazılarımda nedir ne değildir konusuna zaten değinmiştik. Burada öncelikle bir uygulamaya Data Access Application Blog nasıl eklenir? ve genel CRUD (Create, Read, Update, Delete) işlemleri nasıl yapılır? sorularına cevap arıyor olacağız.

Microsoft Enterprise Library 3.1 sürümünü kullanabilmeniz için sisteminizde ;

  • Visual Studio 2005 Professional Edition veya Visual Studio 2005 Team System Edition veya Visual Studio 2005 Standard Edition
  • .NET Framework 2.0
  • Microsoft SQL Server, Microsoft SQL Server CE veya Oracle veritabanı
  • kurulu olması gerekmektedir. Tabiki bir de Microsoft Enterprise Library 3.1 sürümünün kurulu olması gerektiğini, sanırım hatırlatmama bile gerek yok.

     Var olan bir .NET 2.0 uygulamamıza Data Access Application Blog' u nasıl ekleyebiliriz?

    1. Öncelikle Başlat' tan Enterprise Library Configuration aracımızı çalıştırıyoruz

              

         2.  Daha sonra File menüsünden "Open Application" menüsünü seçip Data Access Application Blog' u eklemek istediğimiz uygulamamızın Web.config dosyasını buluyoruz ve açıyoruz.
         3.  Açmış olduğumuz uygulamamız üzerine sağ tıklayıp "New" menüsünden Data Access Application Blog' u seçiyoruz

              

          4. Data Access Application Blog' umuzu ekledikten sonra sıra geldi ayarlarını yapmaya.

             

             Gördüğünüz gibi "Connection String" bölümü altında bağlantı cümlemizi verebileceğimiz bir alan mevcut. Burada verdiğimiz bağlantı cümlesi uygulamamızın Web.config inde <connectionStrings></connectionStrings> tagları arasına eklenecektir.

             Burada ayrıca Application Settings altında uygulama genelinde kullanabileceğimiz "Name" - "Value" ilişkisinde yapılar da tanımlayabiliriz.

             Ayarlarımızı yaptıktan sonra projemizi kaydediyoruz ve uygulamamızın Web.config ine baktığımız zaman verdiğimiz ayarları ve bunun dışında da bir takım ayarlamaların otomatik olarak yapıldığını görebiliriz.

    Data Access Application Blog' u uygulamamızda kullanabilmek için gereken ayarlamaları yaptık. Data Access Application Blog' u kullanabilmemiz için son olarak ta uygulamamızın referanslarına Microsoft.Practices.EnterpriseLibrary.Data.dll ini ve Microsoft.Practices.EnterpriseLibrary.Common.dll ini eklememiz gerekiyor. Bu iki dll i Microsoft Enterprise Library 3.1 in sisteminizde kurulu olduğu klasör içerisinde bulabilirsini. Eğer farklı bir yere kurmadıysanız sisteminizde "C:\Program Files\Microsoft Enterprise Library 3.1 - May 2007\Bin" klasöründen ulaşabilirsiniz.

       Yazımın diğer bölümünde genel CRUD işlemlerine değineceğim.

    Kolay gelsin.

    Enterprise Library 3.1 - May 2007

    18 Eyl 2008


    In: .NET FrameWork, Visual Studio .NET

    Daha önceki yazımda Enterprise Library' nin ne olduğunu ve kısaca amacıdan bahsetmiştim. Bu yazımda ise Enterprise Library 3.1 - May 2007 sürümünden bahsedeceğim.

    Enterprise Library 3.1 - May 2007 sürümünde bulunan uygulama blokları şu şekildedir:

    1. Caching Application Block : Yazılım geliştiricilerine, uygulamalarında caching özelliklerini yönetimini ve geliştirme olanağını sağlar.
    2. Cryptography Application Block : Yazılım geliştiricilerine, uygulamalarında şifreleme tekniklerinden "Hashing" ve "Symmetric" şifreleme tekniklerini kullanabilme olanağı sağlar.
    3. Data Access Application Block : Yazılım geliştiricilerine, uygulamalarında standart veri kaynaklarının kullanımı olanağını sağlar.
    4. Exception Handling Application Block : Yazılım geliştiricilerine, uygulamalarında oluşan hataların yönetimi olanağını sağlar.
    5. Logging Application Block : Yazılım geliştiricilerine, uygulamalarında loglama stratejilerini kullanabilme olanağı sağlar.
    6. Policy Injection Application Block : Yazılım geliştiricilerine, uygulamalarında kullandıkları logging, caching, exception handling ve validation gibi ortak özellikleri yürütmede kullanılan ilkeleri düzenleme olanağı sağlar.
    7. Security Application Block : Yazılım geliştiricilerine, uygulamalarında yetkilendirme, izin verme veya kullanıcı bilgilerini alma olanağı sağlar.
    8. Validation Application Block : Yazılım geliştiricilerine, uygulamalarındaki business objelerine doğrulama kriterleri oluşturabilme olanağını sağlar.

    Yeni Gelen Uygulama Blokları

    1. Validation Application Block
    2. Policy Injection Application Block

    Gelen bu iki blok dışında hali hazırdaki bloklarda (Data Access Application Block, Logging Application Block ) da bazı geliştirme ve düzenlemeler yapılmıştır.

    Hali hazırda Olan Bloklarda Yapılan Yenilikler

    1. Data Access Application Block
      1. SQL Server Compact Edition provider
      2. TransactionScope entegrasyonu
      3. Toplu update
    2.  Logging Application Block
      1. Dosya boyutuna göre veya tarihe göre otomatik dosya oluşturma 

    Uygulama geliştirmek için gereken sistem gereksinimleri
    Enterprise Library 3.1 - May 2007 sürümü ile uygulama geliştirebilmek için sistemimizin şu gereksinimlere ihtiyacı vardır;

    • Microsoft Windows XP Professional, Windows Server 2003, veya Windows Vista işletim sistemi
    • Microsoft .NET Framework 2.0 veya 3.0
    • Microsoft Visual Studio 2005
    • Sürüm dosyaları

    Enterprise Library 3.1 - May 2007 sürümünü indirmek için bu adresi kullanabilirsiniz. Sürüm içerisinde ;

    • Tüm kaynak kodunun derlenmiş halini
    • Kaynak kodu
    • İlgili dökümantasyonlar ve örneklere ulaşabilirsiniz.

     

    Enterprise Library nedir?

    18 Eyl 2008


    In: .NET FrameWork, Visual Studio .NET

    Yapılan birçok enterprise uygulamada caching (önbellekleme),  data access (veri erişimi), Cryptography (şifreleme), exeption handling (hata yönetimi), security (güvenlik) v.b gibi birçok rutin işlemler vardır. Bu işlemler sürekli yapıldığında hem can sıkar, hem de yazılım geliştiricilere inanılmaz zaman kaybettirir. Tam da bu noktada biz yazılımcıların yardımına Microsoft' un yayınladığı  Enterprise Library yetişiyor.

    Peki Enterprise Library nedir?

    Biz yazılımcılara kodlama esnasında yaptığımız rutin işlerde (caching (önbellekleme),  data access (veri erişimi), Cryptography (şifreleme), exeption handling (hata yönetimi), security (güvenlik) v.b) yardımcı olan bir çok yazılım komponentini barındıran bir çatıdır. Açık kaynak kod olarak Microsoft tarafından dağıtılır ve uygulamamızın ihtiyacına göre esnetilebilir.

    Aktif sürümleri

    Enterprise Library' nin amacı:

        Genel olarak 4 temel amacı vardır.

    1. Consistincy (tutarlılık) : Tasarım desenleri ve uygulamalara yaklaşım tarzındaki tutarlılık
    2. Extensibilty (Esneklik) : uygulamamızın ihtiyacına göre veya yazılım geliştiricinin ihtiyaçlarına göre ek görevler veya fonksiyonlar eklenebilirlik.
    3. Ease of Use (Kullanım kolaylığı) : Uygulamalara entegrasyon kolaylığı, kodlama esnasındaki kullanım kolaylığı, örnek uygulama çokluğu
    4. Integration (Entegrasyon) : Tüm blokların tek başına veya diğer bloklarla beraber en iyi şekilde çalışabilmeleri

    Kaynaklar:
    http://msdn.microsoft.com

    Kategoriler