Son zamanlarda dünyada ve özellikle IBM’in konferansından
sonra Türkiye’de de hızla önem kazanan bir konu SOA (service oriented
architecture). Peki SOA nedir?
Herşeyden önce SOA’nın değişik bir yaklaşım olduğunu kabul
etmemiz gerekiyor. Burda değişikten kasıt Fonksiyonel programlamadan da, Nesne
Yönelimli (OOP) programlamadan da farklı olması. Klasik nesne yönelimli
yaklaşımda herşeyi bir nesne olarak görüp nesnelerin birbirleri arasındaki
iletişimi modelleyerek programlarımızı oluşturuyoruz. SOA da ise adından da
belli olduğu üzere işin odağında servisler var.
Servisleri, basitçe yerine getirilmesi gereken işleri yapan,
işverenden bağımsız işçiler olarak düşünebiliriz.
Zaten pek çoğumuz farkında olarak ya da olmadan Web
Servisleri aracılığıyla ucundan da olsa bu yaklaşımı kullandık. Bildiğiniz
üzere web servisleri yayınladıkları servislere gelen uygun istekleri
değerlendirip uygun sonucu geri çeviriyorlar, bunu yaparken de istemcinin aynı
projenin bir parçası olup olmadığını önemsemiyorlar. Zaten amaç da işinde uzman
servisler yaratıp bu çözüme talip olacak uygulamala hizmet verebilmek. En güzel yanı da servsin nasıl kodlandığı
hakkında bir şey bilmenizin gerekmemesi. Sadece verileri uygun formatta
yolluyorsunuz gerisini servis halediyor.
“Verileri uygun formatta yollamak”demişken farkettiğiniz
üzere SOA da öne çıkan bir diğer önemli konu ise haberleşmenin şekli, öyle
rastgele servis odaklı sistemler kuramıyoruz. İşte burda belitmeliyim ki SOA
nın kendisi zaten bir soyut framework, kendi kuralları kendi yöntemleri olan
bir yaklaşım ve bunun sayesinde Platformalar arası bağımsızlık sağlanıyor, bu
da maliyetten tasarruf ve müşteri portföyünde artış olarak yansıyor.
SOA’nın gerektirdiklerine bakacak olursak SOA:
.Referans
modeline uygun servisler içermeli,
.Kullanıcı
ve Servisler arasında görünürlüğü sağlamalı
.Servisler ve
kullanıcı arası etkileşime nasıl aracılık edeceğini bilmeli
.Servislerin
nasıl kullanışacağını anlatmalı
.Servisin yaptığı iş hakkında
bilgi vermeli
.Yeniden
kullanılabilir olmalı
.Modüler
olmalı
.Mümkün
olan en küçük parçalardan oluşmalı
.Poliçelerin nasıl ele alındığı
hakkında bilgi vermelidir.
Servislere bakacak olursak etkileşim esnasındaki
özelliklerini ve genel özelliklerini ayırmanın iyi olacağı kanısındayım;
Servislerin Etkileşim esnasındaki özellikleri ;
1) Görünürlük:
Adından da anlaşılacağı gibi görünürlük kullanıcı ile hizmet verenin
birbirlerini görebilmesidir. Tabi bunun da bazı koşulları vardır.
a)
Farkındalık: Kullanıcı ile hizmet birbirlerinin farkında olmalıdır.
b)
İsteklilik: Özellikle servis sağlayıcının bu alışverişe istekli olmasıdır.
c)
Erişilebilirlik: Servisin başvurulduğu anda erişilebiliyor olması demektir
(Doğru
adreste olması, izinlerinin uygun olması …)
2) Etkileşim: Servislerle etkileşime girilebilmesidir. Bu
genellikle gönderilen mesajlar aracılığıyla olur. Tabi bu mesajlar da bazı
kurallara bağlıdır.
a) Bilgi
Modeli: Servise gönderilecek bilginin şekillendirilmesidir.
.
Yapı: Verinin yapısıdır, kullanıcı için açıklamalar bulundurmalıdır.
. Anlam: Gönderilen veri ilgili
herkes tarafından anlaşılabilir olmalıdır.
b) Davranış Modeli: Servisin
talepten sonra nasıl davranacağının ve geri dönüşünün bilinmesidir.
c)Hareket Modeli: Servisin işlem
sırasında hangi yöntemleri kullandığının bilinmesidir
3) Gerçek Hayata Etkisi: Kullanıcı uygulamanın sahibinin
hizmet verenden beklentisi vardır ve bu hizmetin sonucunda hedeflenen amaca
ulaşılıp ulaşılmadığı önemlidir.
Servislerin genel özellikleri:
1) İyi
tanımlanmış ve anlatılmış olmalı
2) Erişilebilir
ve fonksiyonel olmalı
3) Poliçeler
ve Kontratlar içermeli
4) Gevşek
bağlı olmalı (loose binding)