Olay Güdümlü Programlama İbrahim Gündüz 2015 @ PHPKonf Meetup #05
Olay Güdümlü Programlama
İbrahim Gündüz2015 @ PHPKonf Meetup #05
İbrahim GündüzYazılım Geliştirici
http://tr.linkedin.com/in/ibrahimgunduz
https://github.com/ibrahimgunduz34
https://twitter.com/ibrahimgunduz34
http://www.ibrahimgunduz.net/
TeoriNedir - Felsefe - Avantajlar / Dezavantajlar
●
●Olay Güdümlü Programlama
Nedir ?
Program akışının kullanıcı tarafından tetiklenen senkron veya asenkron olaylarla yönetilmesidir.
●
●Olay Güdümlü Programlama
Felsefe ?
● Ana programın yalınlaştırarak temel işlevleri yerine getirir. Yan işlevler olay dinleyicilerin sorumluluğundadır
● Olaylar senkron / asenkron olabilir.● Senkron olaylar kendi aralarında
önceliklendirilebilir.● Olayın gerçekleştiği yer dinleyicilerin ne
yapacağı ile ilgilenmez.
●
●Olay Güdümlü Programlama
Avantajlar
● Program kodunun yalınlaşması● Olayın gerçekleştiği yer ile aksiyon
alınan yer arasında izolasyon sağlanması.
● Esneklik
Dezavantajlar
● Dinleyici sayısı arttıkça öncelik önem kazanır
● Hata gidermek daha güçtür● Birbirleriyle etkileşim halinde olan
asenkron dinleyiciler büyük problemlere neden olabilir.
Olay Güdümlü Programlama
Olay Güdümlü Programlama!=
Gözlemci Tasarım Deseni
●
●Olay Güdümlü Programlama
Bağımsız Bileşenler● Symfony Event Dispatcher
Componentsymfony/event-dispatcher
● Zend Framework 2 Event Manager zendframework/zend-eventmanager
Web Çatıları:● Symfony2● Zend Framework 2● Laravel● Yii2● Phalcon
Gerçek Dünyaya DönüşElektronik Ticaret Uygulamalarında Olay Güdümlü Programlama
Arama ve Filtreleme● Arama servisine istek gönderilir.● Dönen sonuçlar veritabanından
okunur.● Kullanıcının neyi aradığı, neleri
filtrelediği ile ilgili istatistiksel veriler saklanır.
Olaylar:● Ürün Araması Yapıldı
Ürün İnceleme● Ürün detay verisi veritabanından/ön
bellekten okunur.● Kullanıcının incelediği ürün
detayı ile ilgili veriler dönüşüm oranları, ürüne olan ilgi gibi istatistiksel veriler saklanır.
Olaylar:● Ürün detayı ziyaret edildi
Ürünün Sepete Eklenmesi● Ürün, bellekte kullanıcı sepeti olarak
rezerve edilen alanda saklanır.● Sepete eklenen aded kadar ürün
stokda rezerve edilir.● Rezervasyondan sonra stokta kalan
ürün adedi sıfırsa diğer kullanıcıların bundan haberdar olması sağlanır. (Bu ürün başkasının sepetinde)
● İstatistiksel veriler saklanır.● Kullanıcı sepete kampanyadaki
ayakkabıyı set ettiği için sepete indirim eklenir.
● Sepet içeriği değiştiği için toplam, kdv, indirim ve genel toplam tutarları baştan hesaplanır.
Olaylar:● Sepete Ürün Eklendi● Sepete ürün adedi değişti● Sepet İçeriği Değişti
Ürün Adedinin Değiştirilmesi● Seçilen ürünün sepetteki adedi
güncellenir.● Sepete değişen aded kadar ürün
stokda rezerve edilir.● Rezervasyondan sonra stokta kalan
ürün adedi sıfırsa diğer kullanıcıların bundan haberdar olması sağlanır. (Bu ürün başkasının sepetinde)
● İstatistiksel veriler saklanır.● Sepet içeriği değiştiği için toplam,
kdv, indirim ve genel toplam tutarları baştan hesaplanır.
Olaylar:● Sepete ürün adedi değişti● Sepet İçeriği Değişti
Kasa Önü Fırsatı Kullanımı● Kullanıcı ayakkabı için kendisine
önerilen ayakkabı bakım ürününü sepete ekler.
● Ayakkabı bakım ürünü için stok rezervasyonu yapıılır.
● İstatiksel veriler saklanır.● Sepet içeriği değiştiği için toplam,
kdv, indirim ve genel toplam tutarları baştan hesaplanır.
Olaylar:● Sepete Ürün Eklendi● Sepete ürün adedi değişti● Sepet İçeriği Değişti
●
İndirim Kuponu Kullanımı● Kuponun müsaitlik durumu kontrol
edilir.● Kupon sepete dahil edilir.● Kupon kodu rezerve edilir.● Sepet içeriği değiştiği için toplam,
kdv, indirim ve genel toplam tutarları baştan hesaplanır.
Olaylar:● Sepet İçeriği Değişti
Teslimat adresinin seçilmesi● Kullanıcı ürünün teslim edileceği
adresi seçer. Bilgiler siparişe iliştirilir.
● Kullanıcının seçtiği teslimat adresine uygun kargo şirketlerinin tahmini teslimat tarihindeki müsaitlik durumu için rezervasyon yapılır.
Olaylar:● Adres değişti
Ödeme Sayfası● Kullanıcı ödeme metodunu kredi
kartı olarak seçti.○ Ödeme metodu değiştiği için
kullanıcıya ödeme metoduna uygun argümanlar, banner vs. frontend objeleri görüntülendi.
● Kullanıcı ödeme argümanlarını girdi
○ Ödeme ekranında gerekli alanlar sıfırlandı/gizlendi.
○ Ödeme argümanları değiştiği için backend tarafına istek gönderilerek kullanıcının kart tipi bilgisi belirlendi.
○ Kartipine uygun kart ve banka ve altyapı logoları görüntülendi.
○ Kart tipine uygun taksit seçenekleri görüntülendi.
Olaylar:● Ödeme tipi değişti● Ödeme argümanları değişti● Ödeme Metodu değişti● Taksit değişti
Ödeme Süreci● İlgili servis sağlaycıyıa ödeme
isteği gönderildi.○ Ödeme süreci başarıyla
tamamlandı.■ Sepet, siparişe
dönüştürüldü.■ Banka haberleşmesi ile
ile ilgili veirler saklandı.■ Deponun satıştan
haberdar olması için ERP de satış siparişi oluşturulması için servis isteği gönderildi.
■ İstatistiksel veriler saklandı.
○ Ödeme süreci başarısız oldu.■ Banka haberleşmesi ile
ile ilgili veirler saklandı.■ İstatistiksel veriler
saklandı.
Olaylar:● Ödeme süreci başarıyla
tamamlandı● Ödeme süreci başarısız oldu● Sipariş oluşturuldu.
Laravel ve
Olay Güdümlü Programlama
Neler Var ?● Sınıf ve fonksiyon tabanlı olay
dinleyicileri● Olay üyeleri● Kuyruklanabilir Olay İşleyiciler● CLI araçları● Önceliklendirilebilirlik
Laravel ve Olay Güdümlü Programlama
Örnek Uygulama
●
Laravel ve Olay Güdümlü ProgramlamaNe Yapıyoruz ?Kullanıcı oturum açtığında tarayıcıya flash message basacağız.
Yan Taraftaki Nedir ?● Olay ile ilgili argümanları, olay
yerinden dinleyiciye aktaracağımız Event sınıfını oluşturuyoruz.
app/Events/AuthLogin.php
●
Laravel ve Olay Güdümlü ProgramlamaOlay Dinleyicisi Oluşturuyoruz
● Olay tetiklendiğinde çağırılacak yeni bir olay işleyici sınıfı oluşturuyoruz.
● Olay gerçekleştiğinde kullanıcı oturumunun başarılı veya başarısız olma durumuna göre session nesnesine olumlu yada olumsuz flash message ekleyeceğiz.
app/Handlers/Events/AuthLoginHandler.php
●
Laravel ve Olay Güdümlü ProgramlamaOlay Dinleyicisini Kayıt Ediyoruz
● Yeni oluşturduğumuz olay işleyicisini auth.login olayını üyesi olması için Laravel 5 tarafından sağlanan EventServiceProvider a kayıt ediyoruz.
app/Providers/EventServiceProvider.php
●
Laravel ve Olay Güdümlü ProgramlamaOlayı tetikliyoruz
● Kullanıcı login isteği yaptığında oturum açtıktan sonra auth.login olayını tetikliyoruz.
app/Http/Controllers/UserController.php
Sorular ?
http://tr.linkedin.com/in/ibrahimgunduz
https://github.com/ibrahimgunduz34
https://twitter.com/ibrahimgunduz34
http://www.ibrahimgunduz.net/
Teşekkürler