Merhaba

Aklımı uzun zamandır kurcalayan bir soru var.

MultiThread bir uygulama ve bu uygulamanın farklı türde servislerle iletişim kurduğunu, ve her bir servis ve method dan farklı sonuç veya sonuç kümleri döndüğünü düşünün.

Amacımız herhangi bir servisin, herhangi bir methodunu thread içinde invoke edip,geriye dönen sonucu handle etmek. Fakat bu işlemi yaparken thread sınıfının kodunun kalabalık olmasını istemiyorum.

Muhakkak bu sorunun cevabı kullanılan dilin özelliklerine , kullanılan geliştirme ortamına göre vs değişiklik gösterecektir.

Biliyorum yukarıda ki anlattıklarım biraz havada kaldı,sembolik olarak aşağıda bir örnek vererek derdimi anlatmaya çalışayım.

public class XService
{
  public String getSonuc()
  {

  }
}

public class YService
{
  public String[] getSonucList()
  {

  }
}

public class ZService
{
  public IList<Kisi> getKisiList()
  {

  }
}

public class ServiceThread:Thread
{

}

Sizlerden öğrenmek istediğim,merak ettiğim,siz böyle bir durum için nasıl bir tasarım yapar,nasıl düşünürdünüz ?

soruldu: 24 Ara '13, 15:16

ismailkocacan's gravatar image

ismailkocacan
2.4k31733
cevap kabul oranı: 13%


Selam,

tüm servislerin ortak bir interface'i implement etmesi, bu interface'in çagirimi yapacak metodlarinin generic tipler dönmesi gerekir.

ancak bu servisleri çagiran yerin sonucunda elma mi armut mu donecegini bilmesi gerekir muhakkak. Eger onu da bilmiyorum diyorsan sorun yanlis bir soru haline gelir.

Any question ?

permanent link

cevaplandı: 25 Ara '13, 06:59

MCY's gravatar image

MCY
1.1k2622
cevap kabul oranı: 16%

yorum kısmına sığmadı. Yukarıdaki servis sınıflarına örnek olması açısından,birer tane method yazmıştım. Ama bu method sayısı daha fazla olabilir. Yani servise daha sonra da başka bir method eklenmiş olabilir.

Servisten dönecek tipler belli.

Ortak interface'in şöyle olduğunu varsayalım.

public interface IService
{  
  T invoke<T>();
}

public class YService implements IService
{
  public String[] getSonucList()
  {

  }

  public String amcamaSelamSoyle()
  {

  }

  public string invoke()
  {
    // ?
  }
}

Sorularım :)

1- Tüm servisler IService arayüzünü implement etti. Peki invoke methodu içersinde servisin hangi methodu çağrılacak,getSonucList mi, amcamaSelamSoyle mi ? Thread içersinde istenilen servisin,istenilen methodu invoke edilebilmeli ...

2- Thread içinde servisin methodunun çağırıp,handle etme kısmı nasıl olacak (Thread sınıfında kod kalabalığı olsun istemiyorum) ?

3- Yanlış mı düşünüyorum ? :)

permanent link

cevaplandı: 25 Ara '13, 08:01

ismailkocacan's gravatar image

ismailkocacan
2.4k31733
cevap kabul oranı: 13%

ilk olarak invoke String dönmemeli, <t> dönmeli eger tek bir nesne donuyorsa. Bir veri yapisi donuyorsa List<t> gibi olur, override edebilirsin metodunu. Çagiran yer karar verir.

Bütün bunlarin olabilmesi için sinif tanimin (java için örnek veriyorum) public class YService <t> implements IService gibi olmali.

  1. sorunun cevabi yukarida var gibi. istedigin override'i cagirabilirsin.
  2. sorunun cevabi, tabii ki cagiran yer sonucunu ne yapacagini bilir. Tabii ki runnable olan sinifin run metodunda olmayacak business'in, servis katmanini cagirmali cagirimlar vs de orada yapilmali.
  3. yanlis dusunmuyorsun, guzel sorular bunlar. Gözden kaçirdigin nokta, concurrency. :) semaforlar, atomicity, senkronizasyon vs
permanent link

cevaplandı: 25 Ara '13, 08:27

MCY's gravatar image

MCY
1.1k2622
cevap kabul oranı: 16%

Hocam cevaplar ve ilgi için teşekkürler. Benim biraz daha beyin cimnastiği çalışmam lazım :)

(25 Ara '13, 14:24) ismailkocacan ismailkocacan's gravatar image
1

:) bu tarz seyleri dusunen cok developera rastlamadim, guzel seyler bunlar vazgecme.

Bir de, thread ile generic konusunu su anda ayni senaryoda ele almaya calisiyorsun, once ayri ayri coz sonra cozumleri birlestir derim.

Kolay gelsin

(26 Ara '13, 01:53) MCY MCY's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×31
×14
×1

Soruldu: 24 Ara '13, 15:16

Görüntüleme: 755 kez

Son güncelleme: 26 Ara '13, 01:53

powered by BitNami OSQA