Olay Güdümlü Programlama

Post on 23-Jan-2018

681 views 1 download

Transcript of Olay Güdümlü Programlama

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

ibrahimgunduz34@gmail.com

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

ibrahimgunduz34@gmail.com

http://www.ibrahimgunduz.net/

Teşekkürler