Öncelikle merhabalar, bugünkü yazımızda Trendyol’da yeni bir mimari ile replatform ettiğimiz Chat Bot’u yeni adıyla Trendyol Asistan’ı geliştirirken kullandığımız mimari ve teknolojilerden bahsedeceğim.

Trendyol Asistan temelde state machine mimarisi üzerine kurulmuş, kullanıcıların Müşteri Temsilcisine bağlanmadan sorunlarının çözümlerini bulabilmesi amacıyla tasarlanmış bir uygulama.

İşe öncelikle state machine’i biraz irdeledikten sonra başalayabiliriz.

State Machine nedir?

State machine’i doğrudan teorik bir anlatım ile değil bir örnek üzerinden küçük tanımlamalar ile anlatmak isterim:

Bir E-Ticaret sitesinden bir ürün aldığımızda ürünümüzün durumları temel olarak aşağıdaki şekilde olacaktır.

Bilgisayar bilimlerinde bu tür iş akışlarını modellemek için kullanılan çözüm yollarından birine de state machine (durum makinesi) denir.


Bir süre önce bir uygulamamızda implementasyonunu yaptığım ve bize bazı konularda kolaylık sağlayan bir yöntemden bahsedeceğim: application.propertiesdosyalarında tanımlanmış constant değerleri enum olarak tanımlayabiliriz.

application.properties dosyam şu şekilde :

Belirlediğim enum ise :

Yani şuan 2 tane FOO ve FOO_BAR diye enumerated type tanımladık.

Bu enumerated Type’ların kullanımına gelecek olursak:

System.out.println(Foo.FOO.getValue());
System.out.println(Foo.FOO_BAR.getValue());

Kod parçacığının çıktısı şu şekilde olacaktır :

Test
Test foo bar

Görüldüğü üzere kullanımı oldukça basit ve kod okunulabilirliğini artırıyor.


Image source: unicornsoftlabs.com

Merhaba bu yazımda iyzico ödeme sistemiyle entegrasyon yaparken genel olarak dikkat edilmesi gereken konulara değineceğim.

Başlarken şunu belirteyim; iyzico API dokümanı ben implementasyonu gerçekleştirirken 2 tane vardı. 2 tane diyorum çünkü dokümanların İngilizce olanı ve Türkçe olanı içerik ve kapsam bakımından birbirlerinden farklıydılar. Bu oldukça sinir bozucu bir durumdu :-$

Burada referans aldığım belgeleri şöyle bırakayım:

  1. Türkçe Doküman İçin : https://dev.iyzipay.com/tr
  2. İngilizce Doküman İçin : https://dev.iyzipay.com/en

Bir de ben implementasyon yaparken şöyle bir döküman yayınlandı ama benim inceleme şansım olmadı : https://iyzico.gitbook.io/tr

Sisteme şu adresten kaydoluyoruz. Kayıt işlemini gerçekleştirdikten sonra “Ayarlar” menüsünden API Anahtarı ve Güvenlik Anahtarı bilgilerine ulaşabilirsiniz.

Entegrasyon…


Herhangi bir OOP dilinde olduğu üzere, ortak alanları(propertyleri) tekrar kullanmayı engellemek yerine değişen davranışlar için inheritance kullanabiliriz. Bu yazımda Entity Inheritance’ın nasıl kullanılacağını ve JPA Specification’ın bu durumu nasıl ele aldığını anlatacağım.

Entityler hakkında …

  • Entityler class inheritance’ını, polymorphic ilişkileri ve polymorphic sorguları destekler.
  • Entity classlar Entity olmayan classları extend edebilir. Aynı şekilde Entity olmayan classlar da Entity classlarını extend edebilir.
  • Entity classları abstract ya da concrete olabilir.

İlişkisel veritabanlarının sınıf hiyerarşilerini veritabanı tablolarına eşlemek(mapping) için kolay bir yol yoktur.

Bunu ele almak için JPA Specification’ ın çeşitli yöntemleri vardır:

  1. MappedSuperclass
  2. Single Table
  3. Joined Table
  4. Table-Per-Class

Şimdi bu yöntemleri ayrıntılı…


Geliştirdiğiniz uygulamaların birçoğu bir şekilde veritabanına ihtiyaç duyuyor. Bu nedenle bir O/R teknolojisine ihtiyacınız olabilir. Kullandığınız O/R teknolojileri runtimeda çeşitli exceptionlar fırlatabilir, bu yüzden persistence teknolojisinin exceptionlarının nasıl ele alınacağının kararını vermek zorundasınız. Bu nedenlerle exceptionlara göre dizayn ettiğiniz service layerınız sizi kullandığınız bu teknolojiye bağımlı yapıyor, dolayısıyla coupling artıyor. Spring bize tam da bu noktada güzel bir özellik sağlıyor. Spring implicit olarak, o specific exceptionlardan daha üst seviyede, onları wrap eden ortak exceptionlar yaratıyor; böylelikle O/R değişse bile, siz service layerınızı güncellemek zorunda kalmıyorsunuz.

Gelin beraber detaylı bir şekilde inceleyelim.

Diyelim ki projeye Hibernate kullanarak başladınız ve service layerınızı…


Eğer yeni bir site yapmak istiyorsanız, static bir web site generator sizin için iyi bir seçenek olabilir.Sitenizi oluşturup GitHub üzerinde host edebilirsiniz.Static web site generatorlar hakkında şu blog yazısını okuyup daha detaylı bir bilgiye ulaşabilirsiniz.

örnek olarak bir kaç popüler static web site generator;

Benim de kurulumunu anlatmaya çalışacağım HUGO Go dili ile geliştirilmiş,

Jekyll Ruby dili ile geliştirilmiş,

Gatsby React ile geliştirilmiş,

ve daha fazlası için..

Gelelim Hugo ile static web site oluşturmaya ve bunu GitHub üzerinde host etmeye.

Gereksinimler ;

  1. GitHub Hesabı.Yoksa ücretsiz kayıt olmak için.
  2. Bilgisayarınızda Git 2.5 veya daha üst bir sürümü.

Bilgisayarımıza Hugo yu indirmemiz…

Gökhan Birinci

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store