8/24/2009

Türkçe Kodlama

Fabrika tasarım örneği yaparken tekrar aklıma geldi. Türkçe üye isimleri vererek kod yazmaktan nefret ediyorum. Ortaya tarzanca dediğimiz dilde bir kod bloğu çıkıyor ve bence okunaklılığı iğrenç oluyor. Bunda milli gurur yapacak bir husus yok. Profesyonel hayatımızda kodlarımızı İngilizce yazalım derim; ama Türkçe tasarım desenleri konseptinde örnekleri Türkçe yapmaya devam edecem gibi.

Fabrika Tasarım Deseni ( Factory )

Heralde en çok kullanılan ve bilinen tasarım desenidir. GOF bu deseni yaratılışsal desenler arasında sınıflandırmıştır. Bir desenin yaratılışsal desen olarak niteliklendirilmesi için bu desenin çözüm getirdiği problemin bir sınıfın nesnesinin yaratılışı ile ilgili olduğunu söyleyebiliriz.

Tanımı : Bir nesnenin yaratılması için arayüz sağlayan desendir. Nesnenin hangi sınıftan oluştulacağına, arayüzü uygulayan alt fabrika sınıfları karar verir.
İlk bakışta yukarıdaki tanımın bir insan evladına manalı gelebilmesi, özellikle bu tasarım deseni ile ilk kez karşılaşacak bir kişi için, zor görünüyor:) Aşağıda belki biraz daha manalı gelebilecek bir UML diyagramı üzerinden gitmek en iyi olacak. Tasarım desenleri araştırdıkça, aynı desene ait farklı varyasyonlar göreceksiniz. Bu sizi şaşırtmasın, desenin özü nasıl uygulandığından çok hangi probleme çözüm getirdiğindedir. En basit türev üzerinden gitmekte fayda var.


Genelde yalın kullanımının gerçekleştirildiğini söylemekte fayda var. Bana da daha pratik geliyor ama akademik düzeyde bakacak olursanız, kapsamlı kullanım referans edilmiştir. Peki yandaki UML diyagramları nedir?

Bir soyut sınıfın, hangi somut alt sınıfı ile gerçekleneceğini bilmeden (daha doğrusu bu mantığı saklayarak) kullanımını ifade eder. Nesnenin yaratılış mantığı ise fabrika sınıfı içerisinde saklıdır.
Örneğimiz için yukarıdaki UML diyagramında kullanılan kavramları örnekteki üyelerle eşleyim :

ASinifi :CsvAktarici
BSinifi : ExcelAktarici
Fabrika : AktariciFabrikasi
Tuketici : Console



Yukarıdaki kodda ne oldu? Aktarici fabrikası vasıtasıyla, IAktarici arayüzünü gerçekleyen bir
sınıfın nesnesini yaratmış oldum. Bu şekilde nesne yaratılış mantığını, fabrika sınıfına tekrar kullanılabilir bir şekilde gömüldü. Aklımdan neler geçiyor dersek:

· Kullanıcı(console) hangi kaynağa aktarım yapacağını hard-code olarak bilmiyor.
· Yeni bir aktarım kaynağını oluşturduğum vakit sadece fabrika sınıfını güncellemem yeterli olacaktır(Daha akıllı bir fabrika ile güncellemesem de olabilecek bir yapı kurulabilirdi mesela).
· İstersem nesne yaratılış mantığını değiştirebilirim (mesela format geçersiz hatası yerine varsayılan bir aktarım kaynağı atayabilirim) .
· Kod ve tasarım kalitesi daha yüksek .
· Eğer kapalı bir API yazıyor olsaydım, API kullanıcılarına kendi aktarım kaynaklarını oluşturabilecekleri daha akıllı bir fabrika oluştururdum.
· Fabrika sınıfıyla, hangi sınıfın örneğinin yaratılacağına karar verdiğim gibi, nasıl yaratılabileceğini(hangi state’de) de teşkil eden bir yapı kurabilirdi.

Yukarıdaki kod bir referans olması için değil; en basit manada bir örnek olması için yazılmıştır. Çok değişik şekillerde de gerçekleştirilebilirdi. Özellik daha akıllı(mesela reflection kullanılarak) fabrika sınıflarıyla çok daha güzel işler yapılabilirdi. Çokça örnek incelemekte fayda var.

Umarım bakış açınıza bir katkısı olmuştur.

8/20/2009

Table Adapters ve Ms Access

Ms Access üzerine hızlıca geliştirmek istediğim bir uygulama vardı. Tabi ki ilk yaptığım şeylerden birincisi Ms Access için kod generator aramak oldu. Lakin içime sinen ücretsiz bir kod üretici bulamadım. Bunun üzerine Typed Dataset'leri ve Table Adapters'ları kullanma yoluna gittim. Çok pişman oldum:) Bir kere nasıl bir mantıktır ki iki tabloya transaction olarak kayıt yazmak istersen buna destek bulamıyorsun, kendin connection belirlemek veya adapter'lara vermek gibi seçeneğin yok. İlla konfigürasyondan okuyacaklar. System.Transaction'dan ağzı yananınız olmuşsa da yoğurdu üfleyerek yiyecektir benim gibi. İnternette rastladığım birkaç örnekte reflection ile TableAdapter'ların private olan connection nesnesine kendi connection'larımızı atayabileceğimizi okudum ama bunu da çok saçma buldum açıkçası. Acaba Ms Access için ücretsiz bir kod üretici bilen var mıdır?

Sırf hostinging daha uygun olması için seçtiğim Ms Access için şimdi kendim DAL oluşturacam gibi görünüyor; ya da SQL'e mi geçsem:)

8/15/2009

Twitter, FriendFeed ve BlogSpot

Son olarak Twitter'a da abone olarak seriyi tamamladım. Friend Feed'in Blogger ve Twitter ile olan entegrasyonu çok hoşuma gitti:) Daha başka opsiyonlarda var ayrıca. Feed dünyasına gireceklere tavsiye edilir.