Etiketler
.Net - VB.net, Collections, Custom Indexer, Generics, Püf Noktaları
Generic Collections (Genel Koleksiyonalar) | Custom Indexer (Varsayılan İşaretleyici)
Uzun yıllar C ile algoritmalar geliştirmiş birisi olarak, dizilerden (Array) koleksiyonlara (Collections) terfi etmiş olanın ne kadar büyük bir memnuniyet olduğunu tarifi etmek kolay değildir. Benzer süreçleri yaşanlar iyi bilirler. İllaki her programlama dilinin içinde pek çok çözüm sunulur, sunulmasa bile kendi çözümlerinizi
kendiniz oluşturabilirsiniz. Kendi veri tiplerinizi, özelleştirilmiş koleksiyonlarınızı herhangi bir programlama dilinde, dilin el verdiği ölçüde hazırlayabilirsiniz. Esnek kullanımı, hazır fonksiyonları gibi bir sürü avantaj içeren koleksiyonların, en önemli artılarının başında veriye ulaşma ve okuma hızı gelir. Performans söz konusu olduğunda akla ilk gelen terim “INDEX” lemedir. Veritabanı mimarisinde de çok önemli bir kavram olan “INDEX” ler, veriye ulaşma ve veriyi okuma performansınızı önemli ölçüde artıran bir avantajdır. Benzer şekilde dosya sisteminizde (File System) bir dosyaya erişimizi hızlandıran yine aynı “INDEX” leme tekniğidir.
Koleksiyonlar indexleme tekniğini üzerlerinde barındıran, bellek üzerinde veri saklayan yapılardır. Belleğin veritabanı ve dosya sisteminden çok daha performanslı olduğu göz önüne alındığında, bellek üzerinde indexleme tekniğini kullanan koleksiyonların ne denli performanslı olabilecekleri aşikardır. Sadece performans değil elbette koleksiyonları tercih etme sebebimiz. Veri güvenliğini düşündüğünüzde de, bellek üzerinde (in-memory) saklanan koleksiyonların veri tabanından bağımsız (disconnected) çalıştığı için “sql-injection , command-injection” önlemede doğal bir kalkan olurlar. Bir de. Net özelinde de “Generics” ile gelen tip güvenliği (ki bu bizi başta UpCasting / DownCasting işlemlerini gerçekleştirmekten kurtarıyor. (bknz : https://dervisali.wordpress.com/2006/05/29/vb-net-de-casting-directcast-vs-ctype/ ) ), … gibi özelliklerle oldukça çekici hale geliyor.Bu yazımda size kod örnekleriyle “Genel Koleksiyon Tipleri (Generic Collections) üzerin de bir özelliği (Property) varsayılan olarak işaretlemeyi (Custom Indexer)” anlatacağım. Bu amaçla kendi genel koleksiyon tipimizi oluşturacağız.
Amacım size sadece koleksiyon kullanımını anlatmak değil elbette. Projelerinizde kullanabileceğiniz nacizane bir best practise paylaşacağım. Her projede karşılaşılmaması imkânız olan bir durumu modelleyeceğim. Özellikle kullanıcı ara yüzdeki arama/sorgulama ekranlarında aralık verilerek gerçekleştirilmek istenen sorgularda, ihtiyacı hissedilen ekstra parametreleri fonksiyonların tanımlanış biçimini/imzasını bozmadan alt katmanlara taşımak için özel bir veri tipi tanımlayacağız. Bu ihtiyaç en sık “başlangıç ve bitiş tarihi” veya “en az ve en çok değeri” verilerek filitreleme yapılmak istenen sorgularda, sorgulama yapacağımız tablo/görünüm de olmayan ve dolayısıyla o tablo/görünüm ü baz alarak oluşturulan [Entity] de olamayacak olan ekstra alanları taşımada ortaya çıkar. Biz bu ekstra alanlara ait bilgileri yine hazırlancak bir sınıfı üzerinde saklanacak, ve koleksiyonumuzu da bu sınıf parametre alan generic bir koleksiyon olarak System.Collections.Generic.List(Of T) tipinden türeterek (inherit) oluşturacağız. Tüm ekstra alanlar koleksiyon ile taşınacaktır.
Detayları yazı içinde yayınladığım kodlardan görebiliriz. ( Not : Resimleri büyütmek için üzerlerine tıklamanız yeterlidir. )
Generic Koleksiyonumuz ve Custom Indexer (Default Property) :
( Not : Resimleri büyütmek için üzerlerine tıklamanız yeterlidir. )
Bilgileri saklayacımız sınıf :
( Not : Resimleri büyütmek için üzerlerine tıklamanız yeterlidir. )
C# Custom Indexer (Public new ) :
( Not : Resimleri büyütmek için üzerlerine tıklamanız yeterlidir. )
Geri bildirim: Tasarımda Göz Önüne Almanız Gerekenler / Boxing ve Unboxing Tasarımı « Mehmet Özakan