Makale Özeti

Makalenin Smart Client'ı Daha İyi ve Detaylı Olarak Anlamaya Yardımcı Olacağını Umuyorum. Smart Client İçin Performans Arttırmaktanda Bahsettiğim Makalemde Örnek Bir Proje ve Algoritma Yapısıyla Projenin Yapım Aşamalarını Maddelendirerek Anlattım.

Makale

merhabalar...

bu makalemde windows form için smart client uygulamaları hakkında detaylı bilgiler vermeye çalışacağım.

öncelikle smartclient nedir bunu tekrar bir kısa ve öz bir şekilde açıklayalım.

smart client windows formların dış veriler ile çalışmasını her durumda ve her ortamda çalışabilmesini sağlamaktır. zaten adındanda belli olduğuğu gibi akıllı istemcilerdir.
smart client basit 3-4 dosya ile büyük kurulumlara ihtiyacı olmadan bütün işlemlerini web servisler ile yapabilen uygulamalardır. aslında smartclient kullanım yönü ile genel olarak şu şekilde kullanılır.
Her kullanıcı istediği veriyi her an ve her yerde görmek isteyebilir. Fakat bunun gerçekleşebilmesi için mutlaka gittiği her yere ilgili program kurulumlarını ve verilerini taşıma ihtiyacı duyar. Bir çok işlelerden sonra veriler ile çalışır ve zaten bu kullanıcıyı programı hazır hâle getirinceye kadar canını sıkar.

Ben bu makalemde smartclient teknolojisini daha iyi anlatabilmek için örnek bir uygulama yapacakmış gibi proje geliştiricem. öncelikle projemi belirleyelim.

Projem bir adres defteri uygulaması olsun. Ve ben bu adres defterimi her ortamda ve her an görebilmek istiyorum.( ben basit bir konu seçtim. içinizde bunu internet sayfası haline getirelim daha kolay çalışırız diyenler olabilir ama bu projenin daha kapsamlısını düşünecek olursak internet safaları pek işimizi görmeyebilir. )

Bana gerekli olan bir kaç gereksinim var. Bunlar :

1-) Verilerimi tutacak bir veritabanına ihtiyacım var ve bu veritabanı bir sunucuda yayında olsun ki ben dış ortamladan da verilerime ulaşabileyim.
2-) Verilerime ulaşabilmek için bir arayüz kullanmam gerekli. Yani bir xml web servisi olması lazım ki bunun nedenini ise şu şekilde açıklayayım. Bilindiği gibi MSSQL veya diğer veritabanlarına direk bağlantı uygulamalarımız için büyük bir yüktür. ve uygulamalarımızın istediği veriyi internet ortamında taşımak herzaman problem olmuştur. Bunun yerine herkesinde bildiği gibi XML veri yapılarını kullanacağız. XML ile verilerin en hızlı şekilde taşındığını biliyoruz ve öyleki smartclient uygulamalar XML siz hiç bir şey ifade etmezler. ilgili verilerimizi XML ile bize veri bilgisini sağlamak için ise XML WEB SERVİSine ihtiyacımız var.
3) Ve tabiki verilerin işlenmesi için gerekeli olan bir uygulama ve buda tabiki bir çalıştırılabilir bir uygulama olacak.
Alttaki şekilde genel olarak projemiz için yapılacak yapı ağacı var.

şimde de projemizin çalışma mantığı hakkında br algoritma geliştirelim. projemiz adım adım şu şekilde çalışsın:

1-) Uygulamamız başladığında şu şekilde bir işlem gerçekleşsin. Eğer ben uygulamayı bulunduğu konumdan ilk defa çalıştırıyorsam elimde belli bir kayıt olmayacaktır. Verileri sunucudan xml servisi ile çekmem gerekir. eğer internet bağlantım var ise bunu otomatik olarak yaptırabiliriz. Ama kullanıcı uygulamayı çalıştırdığı zaman diliminde karşıdan verileri yüklemesi için bekletmek kullanıcıyı sıkacağından dolayı sadece ilk 10 kayıt veya 20 kaydı listeletmek daha sağlıklı olcaktır. Ve yine ilk açılışta bilgileri çekerken ilgili kişilerin tüm bilgilerini çekmemiz çok mantıksız olacaktır. Çünkü bize o an sadece Gökhan ÇETİN'in adres bilgileri gerekli. Bu durumda iken Veli ÇALIŞKAN'ın bilgilerini getirmek gereksiz. yani adres defterimizdeki kişi listsindekilerin sadece ad,soyad ve isteğe göre telefon numarası veya e-posta bilgisini getirmek ilk açılış için yüksek oranda performans kazandıracaktır. İkinci durum olarakta eğer internet bağlantımız yok ise bunu kullanıcıdan talep etmemiz gerekecektir.

2-) Açılışta ilk 20 kişimizi listelediğimizi var sayalım. eğer kullanıcının aradığı kişi bu liste içinde yok ise kullanıcıya bir arama yaptırmamız gereklidir. Ve bunu istediğimiz şekilde yaptırmak bizim elimizde. Ama yine bunu yapmak bizim elimizde. Ve yine performans için kendimiz bazı kontroller koyabiliriz. Örneğin ben bunu kendim için tasarlamış olsaydım. arama anında bazı arama özelliklerine göre gelecek olan bilgileri en aza indirmeye çalışırdım. Mesela kişi isim texbox ına 3 karekterden az bilgi girdi ise demekki kişi arayacağı kişi hakkında fazla bir net düşüncesi yoktur demektir. bunun için arama sonucu büyük bir sonuç döndüreceğinden yine gelecek olan bilgilerin sadece kısa bilgilerini alırdım. Fakat 3 ten fazla ise demekki kullanıcı ne aradığını biliyordur ve gelen sonuç sayısı nasıl olsa az olacağından dolayı kişilerin tüm bilgilerini getirmeyi tercih ederdim. Veya yine başka bir seçenek olarak kişiden aradığı kişinin hangi bilgisine ihtiyacı olduğunun bilgisini isterdim. Örneğin kişi sadece aradığı kişinin e-posta adresine bakacaksa diğer bilgileri getirmeme gerek kalmayacaktır. tabiki bunların dışında kullanıcıyada belli seçenekler verilebilinir. bunları arka tarafta benim belirlemem yerine kişiyede tanımlatabiliriz. Ve son olarak şu özelliğide ekleyebiliriz: Veri istemciye gelmişken bunu silmek gereksiz. elbet bir gün o kullanıcı ile ilgili işlem yapılacaktır. İlgili kişinin bilgilerini kendi bilgisayarımıza kaydedebiliriz.

3-) Verileri listeleme ve süzme işlemi üstteki maddelerde tanımladık. Şimdide veriler üzerindeki değişiklikler üzerine biraz algoritma geliştirelim. Diyelimki kullanıcı Gökhan ÇETİN kişisinin adres bilgisini değiştirmek istiyor. Bilgiler elimizde ve bilgileri güncelleme işlemi için bir bir yordam yürütmemiz gerekecek. bunu için öncelikle karşımıza çıkabilecek engelleri göz önüne alarak hareket etmemiz gerekir. Eğer bağlantımız yok ise belli bir kayıt işlemi gerçekleşmeyecektir. kayıt sadece kendi bilgisayarımızda değişmiş olacaktır. internet bağlantımız yok diye ve ben bunu karşıda değiştiremiyorum diye kullanıcıdan bu işlemi daha sonra yapmasını istemek yerine bunu kendi kayıtlarımıza bir işaret ile kaydedebiliriz. Ve uygulamamıza belli aralıklarla internet bağlantı kontrolü yaptırarak bağlantımız yine sağlandığında karşı sunucuda elimizdeki değiştirilmiş olarak işaretlenmiş kayıtları sunucuda güncelleriz. Bu işlemi yaparken yine şöyle bir engel çıkabilir karşımıza. Diyelimki bu verileri sadece siz değilde başka kullanıcılarda aynı ayda kullanabiliyor. ve siz diyelimki Gökhan ÇETİN kişisi'nin eposta adresini değiştirdiniz ve yeni eposta adresi olarak g.cetin@cmfnet.net yaptınız. Ama internet bağlantınız olmadığı için değişiklik sadece kendi bilgisayarınızdaki verilerde değiştirildi. sizin değiştirdiğiniz veri sunucuda değişmediğinizden başka bir kullanıcıda yine Gökhan ÇETİN kişisinin yine eposta adresini gokhan.c@cmfnet.net olarak düzenledi. ve sunucudada değişikliğini gerçekleştirdi. ilk değişikliği yapan kullanıcı internet bağlantısı geldiği zaman belli bir güncelleme işlemi gerçekleştirmesi gerekli. güncellemeyi yapmaya çalıştığı zaman bir kontrol ile kullanıcının değişikliğinden önceki verinin hâlen aynı olup olmadığını kontrol ettirmemiz gerek. Yani diğer kişinin değişikliğini yok saymamamız lazım. Bunun için kullanıcıya bir uyarı gösterebiliriz. Örneğin şu şekilde olabilir. Değiştirilmeye çalışılan veri bilgisi (gokhan@cmfnet.net),sizin yağtığınız değişiklik(g.cetin@cmfnet.net) ve diğer kullanıcının yaptığı değişiklik(gokhan.c@cmfnet.net) olarak 3 seçenek verebiliriz. Son olarak hangisinin doğru bilgi olduğunu sorarak işleme devam ederiz. İşlemde diğer kullanıcının girdiği veri yani gokhan.c@cmfnet.net i kabul etmişsek sunucudaki gerçek kayıt o şekilde değişmiş olacaktır.

4-) Bunlarla birlikte smartclient lar için önemli olan bir husus daha Thread kullanımıdır. Çünkü veriler her an karşı sunucudan alınmaktadır. Her bağlantı sırasında verilere ulaşmak için gelecek verinin boyutuna bağlı olarak uygulamamızda belli bir bekleme sıkıntısı ve işlem yapamama problemi çıkacaktır. Bunları engellemek için için farklı bir işlem olarak bu yordamları çalıştırmamız gerekir. Bunu da Thread sınıfları ile yapmamız gerekmektedir.

Bu yukarıdaki maddelerde hem projeyi basit bir uygulama ile anlatmakla kalmadan aynı zamandada performans içinde bazı teknikleri ekledim. tabi siz bunu daha da geliştirebilirsiniz.

Şu anda Türkiye'de kullanılan bir smarclient örneği vermek isterim. Açıkçası ben smartclient'ı fazla tanımıyorken bu program ile ilgim daha da çok arttı. bundan 2 yıl önce kadar metro turizm ile bir seyahat için sehir dışında bir yazıhaneye girdiğimde kullandıkları program gözüme çarpmıştı. metro turizm tüm koltuk rezervasyon işlemlerini bir smartclient sistemi ile yürütüyordu. yani tüm seferleri bir sunucuda tutuluyor ve her yazıhane direk olarak hangi otobüsün hangi koltuğunun boş olduğunu bu program ile görme şansına sahipti. dikkatimi çekince her meraklı programcı gibi :) orada çalışandan izin isteyip inceledim. Program bir internet sayfasındaki bir bağlantı ile açılıyor ve çalışması sırasında 4-5'er dakikalık aralar ile bilgileri otomatik güncelliyordu. bu sayede her an otobüsün koltuk durumunu tüm yazıhaner anında görebiliyordu.

Bu sadece şuan kullanılan bir örnekti. Tabiki 2 yılın ardından bir çok şey değişti ve smartclient kendini dahada geliştirdi. Şuan Smart Client çok fazla ihtimale uğruyor fakat yavaş yavaş insanlar bu teknolojiye ayak uydurmaya zorunlu kalacak gibi görünüyor. :)

SmartClient ile ilgilenmek isteyen arkadaşlar eğer benim ile irtibata geçerler ise onlara faydalı ve sağlam bir döküman gönderebilirim. E-Posta Adresim : gokhan.c@cmfnet.net
(Döküman İnglizce'dir.)