10 Aralık 2013 Salı

Distinct İslemi Yapmanin 4 Yolu


Merhaba Arkadaşlar,

Yazılım geliştirirken zaman zaman eldeki koleksiyon tipindeki veriler üzerinde kolon(lar) bazında distinct(farklı, ayrı) işlemiyle benzer kayıtları filtrelememiz gerekebilir. Sql tarafında bu işlem için "distinct" komutu vardır; .net tarafında Enumerable sınıfı içerisindeki Distinct() genişletme metoduyla veya çeşitli linq sorgularıyla bu işlem kotarılabilir. İşin özünde nesnelerin farklılığını saptama olduğundan, eldeki çözümler artalanda nesnelerin kimlik niteliği olan hasCode'a dayanır. Tüm sınıflar örtülü olarak Object sınıfından kalıtıldıkları için de her nesnenin Object sınıfı üzerinden gelen GetHashCode() metoduyla nesnenin hash koduna ulaşılıp eş(it)lik kontrolü yapılabilir.

30 Ekim 2013 Çarşamba

Farkli Bir Assembly'deki Internal Metodu Reflection Ile Cagirma


Merhaba Arkadaşlar,

Bildiğiniz üzere nesne yönelimli programlamada, bir sınıfın private erişim belirleyecisi(access modifiers) ile tanımlanmış öğelerine(class, struct, method, property, field) kapsülleme mantığı gereği o sınıf dışında ulaşamıyoruz. Yine hatırlarsanız internal erişim belirleyicisi ile tanımlanmış öğeler ise bulunduğu assembly’nin dışında erişime kapalıdır. Fakat gün geldi erişime kapalı bir öğeyi kullanmaya ihtiyacınız oldu ya da sırf gıcıklığına buna yeltendiniz; o zaman okumaya devam edin :]

15 Ağustos 2013 Perşembe

Asp.net MVC CheckBoxList(Helper) Kullanimi


Merhaba,

Bildiğiniz gibi asp.net mvc'nin etkili ve geliştirme sürecini kısaltan özelliklerinden birisi de, textbox, label, dropdownlist vs gibi html komponentlerini kolayca oluşturmamızı sağlayan geniş html helper kütüphanesi. Fakat çoklu seçim işlevselliğini sağlayan "CheckBoxList" komponenti için, html helper kütüphanesinde herhangi yardımcı genişletme metodunun varlığı söz konusu değil. Bu problemi çözmek için yazılımcılar olarak kolları sıvayıp view üzeride razor'un da yardımıyla döngüye girip istenen html çıktısını elde edebiliriz:

1 Ağustos 2013 Perşembe

Kendi AutoMapper'ımızı Yapalım


Merhaba Arkadaşlar,

Veri merkezli uygulamalarda, katmanlar arasında veri alışverişi yarparken kullanıcı katmana veriler çoğu kez aracı tipler(DataTransferObject) vasıtasıyla taşınır. Özellikle veri katmanında orm teknolojilerinin kullanıldığı projelerde aracı servis katmanında, transfer objesi(dto) ve veritabanı objesi(entity) arasında kolonsal(properties) eşleştirmeyi tek tek yapmak yazılımcı için sıkıcı bir süreç. Konuyu koda dökerek somutlaştırılam:

29 Temmuz 2013 Pazartesi

Asp.net MVC Birim Testleri Yazarken Session’ı Taklitleme(Mocking)


Merhaba,

Bu blog girdisinde aspnet mvc projelerinde controller’a birim testleri yazarken karşımıza çıkan bir probleme çözüm getirmeye çalışacağım: Session’ın taklit edilmesi.

Aspnet MVC Framework’ü günümüz yazılım gerekliliklerinden biri olan”test edilme” özelliği gözetilerek geliştirildiği için controller, model vs üzerine kolayca birim testleri yazılabilir. Fakat HttpSession, QueryString, HttpContext gibi temel tiplerin kullanıldığı senaryolara yönelik test yazarken, bu tiplerin taklit edilmesi başlı başına bir iş olabiliyor. Çünkü test ortamında controller’ın nesnesini oluşturduğunuzda maalesef HttpContext, Request vs gibi web ortamından doğan bağımlılıkların değeri atanmamıştır:

Android Emülatörünü Hızlandırma


Android yazılım geliştirmenin en çekilmez taraflarından biri kuşkusuz hantal emülatörüdür. Bu problemi android telefonunuzla aşmanız mümkün fakat developer olarak küçük uygulamaları bile test etmek için telefonumuzun usb kablosunu pc'mize takmak bile bazen çok meşakkatli görünebiliyor gözümüze :]. Tabii bunun yanında telefonumuzla test yaparken göremediğimiz, uygulama dizininindeki dosya ve veritabanlarını görüntülemek gibi işlevsellikler de var.

AsyncTask'den Değer Döndürmek


Merhabalar,

Android uygulaması geliştirirken bir kaynak tüketimi(internetten dosya çekmek vs.) söz konusu olduğunda bildiğiniz üzere, işlem sırasında grafik arayüzünün(ui) donmaması için bu tarz uzun süreli işlemleri ui thread yerine ayrı bir thread'de ele almak gerekir. Bu işlemi ayrı thread'de koştururken kullanıcıya da işlemin tamamlanma süreci progressbar ile gösterilirse hoş bir deneyim sağlanmış olur.