AngularJS Gone Wild Day:5 - dunno
Görkem Özdoğan | June 21, 2016 | AngularJS | No Comments
Bir çalışana “servis” denildiğinde akla işyerinde eve, evden işe gittiği araç gelir. Bu çalışan bir yazılımcı ise web servis, windows servis, wcf servis gibi kavramlar çağrışması daha muhtemel. Peki bu çalışan AngularJS ile uğraşıyorsa? İşte o zaman daha da başka bir kavrama gidebilir aklı. İşte bugünün konusu da bu, AngularJS services kavramını incelemeye çalışacağım.
AngularJS built-in olarak 30 kadar servis sunmakta bizlere. Bu servisler içerisinde şüphesiz ki en öne çıkanı $http http request’leri yapabilmeyi sağlayan servistir. Bunun yanı sıra $location, $animate, $locale, $q gibi sıkça kullanılan servisler yer almakta.
Aşağıdaki örnekte Controller’a argüman olarak verilen $location servisinin kullanımına basit bir örnek var.
AngularJS built-in servislerini kullanmak event’leri ve değişiklikleri yakalama işini bir nevi Angular’a bırakır. Bu yüzden kullanımı kolaylaştırmak, bağımlılıkları azaltmak adına kullanmak faydalıdır.
En sık kullanılan built-in servisi belki de $http, bu servis vasıtasıyla sunucuya istek gönderip, cevap alıp cevaba göre uygulamayı işletmek mümkündür. Yine basit bir $http servis örneğini aşağıdaki plunk’ta görebilirsiniz.
Controller içerisinde built-in servislerin kullanımı bu şekilde olmaktadır. Kullanmak istenen servis callback fonksiyonuna bir argüman olarak eklenir ve gereken yapılır. Önyüze aktarılacak bir fonksiyon varsa “atılır hafızaya” ve kullanılır. Bu güzide built-in servislerin yanısıra “custom” servislerde yazmak mümkün.
Tanımlanan custom servisler singleton objeler şeklinde kullanılır. Bu da özetle, demek oluyor ki tanımlanan bu objeler uygulama boyunca tek bir kere tanımlanır ve kullanılır.
Service & Factory & Provider
Bir angularJS servisi tanımlamak için 3 yöntem mevcuttur. Bunlar :
AngularJS için bir servis aslında bir fonksiyon anlamına gelmektedir. Bir modüle argüman olarak referans verilen “service” fonksiyonunun bir “instance”ı anlamına gelmektedir. İşte bu husus “factory” ile arasındaki farktır. Bir modüle factory olarak referans verilen servis fonksiyonun kendisini geriye dönecektir. Provider servisi ise yapılan get çağrısından gelen değeri döndürmektedir. Aralarında ufak tefek farklar olmasına rağmen “provider” göze daha karmaşık görünüyor. Provider tanımı bir modül yüklenirken yapılabilmektedir.
Diğer yazılara nispeten daha kısa kalan bu yazıda angularJS servis kavramını ele almaya çalıştım. Built-in servislerine değindikten sonra, Service, Factory ve Provider arasındaki farklara değinmeye çalıştım. Konu ile ilgili araştırmalar genellikle şu linkteki açıklamaya çıkıyor. AngularJS developer guide’ındaki açıklamalardan feyz alarak ufak tefek örneklerle destekleyerek aslında derin ve uzun bir konuya giriş niteliğinde bir yazı ortaya çıktı. Bu gibi kavramların detayları için yazı serisinin devamında tekrar başlıklar açabilirim. Son olarak şöyle bir eşitsizlik yapmak mümkündür diye düşünüyorum. Provider>Service>Factory>Value. Hemen hemen her zaman istenilen servis tipini kullanmak konusunda özgürlük söz konusu. Fakat çorba için kaşık kullanırız, makarna için çatal, büyük suların tahliyesi için kepçe, saman toplamak için ise dirgen kullanmak daha uygun olur. O misal, ihtiyaca göre doğru tip nesneleri kullanmak, uygulamanın verimliliği açısından önemlidir. Bu yazıda söyleyeceklerim bu kadardı. Umarım fayda sağlar.
Tags:angular services, AngularJS