• Sonuç bulunamadı

KULLANILAN TEKNOLOJİLER VE SİSTEM MİMARİSİ 1 Kullanılan Teknolojiler

Belgede Engelsiz bilişim 2019 (sayfa 74-78)

EDUCATION PLATFORM FOR DYSLEXIA INDIVIDUALS

2. KULLANILAN TEKNOLOJİLER VE SİSTEM MİMARİSİ 1 Kullanılan Teknolojiler

JavaScript

JavaScript, web dünyasında kullanılan yüksek seviyeli bir programlama dilidir ve web uygulamalarındaki verileri manipüle ederek kullanıcı gereksinimlerinin karşılanmasında kritik rol oynar. Client-Side olarak da bilinen, web uygulamasının kullanıcıya sunulan kısmında kullanılır. Tek düze ve statik olan web sitelerine hareket katarak bu sitelerin kullanıcı dostu hale gelmelerini sağlamak ise JavaScript’in diğer bir amacıdır. JavaScript, esnek yapısı sayesinde hem nesne tabanlı programlamada hem de fonksiyonel programlamada kullanılabilir. JavaScript dilinin söz dizimi Java’dan türetilirken, first – class functions yapısı Scheme’den ve prototip tabanlı kalıtım yapısı Self dilinden türetilmiştir. (Flanagan, 2011)

Esnekliğin yanında, JavaScript’in birçok geliştirici tarafından kabul görmesi ve aktif olarak kullanılıyor olması, topluluk ve kuruluşların bu dili farklı alanlarda kullanma isteğini arttırmıştır. Örneğin, Google Chrome V8 JavaScript motoru üzerine kurulan Node.js platformu sunucu tabanlı uygulamaları yazmayı mümkün kılmıştır. (Cantelon, Harter, Holowaychuk, & Rajlich, 2014)

React Native

JavaScript kullanarak mobil uygulamalar geliştirmeyi mümkün kılan, açık kaynak kodlu bir yazılım geliştirme çatısıdır. Facebook tarafından geliştirilen React Native, gene Facebook tarafından üretilmiş React kütüphanesinin üstüne kurulmuştur.

React Native tek kod ile Android ve iOS platformlarına uygulama çıkarmayı sağlamaktadır. Bunu işlevselliği ise bridge (köprü) denilen yapı aracılığıyla sağlar. React Native’de üretilen her bir bileşenin Android ve iOS gibi gerçek platformlarda bridge ile karşılığı tanımlanıp tetiklenir. Bu sayede React Native ile üretilen uygulamalar yalnızca doğal gözükmekle kalmaz aynı zamanda kendi platformlarında karşılıkları ile eşleştiği için doğal hissettirir

70 Node.js

JavaScript kullanarak sunucu katmanında uygulamalar geliştirmeyi mümkün kılan açık kaynak kodlu, Google Chrome V8 Engine üzerine kurulmuş bir JavaScript runtime’dır.

Herhangi bir veri okuma / yazma işlemi gerçekleştirileceği zaman kodun çalışma akışını durdurmayan asenkron bir yapıya sahiptir. Veri okuma / yazma işlemini gerçekleştirecek fonksiyona işlem sonucunda gerçekleşecek olayı bağlar ve kodun kalan kısmının çalıştırılmasına devam eder. Okuma / yazma işlemi gerçekleştiğinde ise bağlanan olay gerçekleştirilip işlem tamamlanır. (Cantelon, Harter, Holowaychuk, & Rajlich, 2014)

Apollo Server

Apollo Server kütüphanesinin işlevini ve kullanım alanlarını öğrenmeden önce GraphQL kavramına değinmek faydalı olacaktır. GraphQL, Facebook tarafından fazla ya da eksik veri getirme, sürekli değişen kullanıcı isterileri ve bu isterler doğrultusunda değişen veri ihtiyaçları, front-end & back-end takımları arasındaki iletişim kopuklukları ve back-end uygulaması dokümantasyon problemlerini aşmak için açık kaynak biçiminde geliştirilmiş bir sorgu dilidir. (GraphQL Foundation) Sunulacak veri tipleri ve bu veriler üzerinde ekleme, silme, güncelleme ve okuma işlemleri (CRUD) yapılmasına olanak sağlayacak fonksiyonlar için schema adı verilen yapılar oluşturulmaktadır. Schema yapıları bir nevi oluşturulduğumuz API’ın kullanım kılavuzudur. API içerisinde gezecek olan her bir veri yapısının tipi ve CRUD fonksiyonlarının parametreleri ve dönüş değerleri schema’lar içerisinde tanımlandığı için karmaşıklık minimum seviyeye inmektedir. CRUD operasyonlarının yapılmasını sağlayan fonksiyonlara GraphQL terminolojisinde resolver denilmektedir. Okuma işlemleri için kullanılan resolver fonksiyonlarına query adı verilirken, güncelleme, ekleme ve silme işlemleri için kullanılan resolver fonksiyonlarına mutation denilmektedir.

Apollo Server ise GraphQL sorgu dilini kullanarak erişilebilecek server uygulamaları geliştirmek için kullandığımız popüler kütüphanelerden biridir.

Apollo Client

React ve daha birçok front-end JavaScript çözümlerinde GraphQL sunuculara erişmek için kullanılan kütüphanedir. Mutation ve Query işlemleri için fonksiyonlar sağlarken bu işlemler gerçekleşirken işlem durumunun detaylı denetlenmesini sağlayacak parametreleri de kullanıcısına sunmaktadır.

Apollo Client ağa bağlanma işlemleri sırasında Observer tasarım kalıbı kullanılarak oluşturulan link yapılarını kullanmaktadır. (Apollo Client) Kütüphane HTTP Link ve Error Link gibi yapıları sağlarken bu var olan linkleri kendi ihtiyaçlarımıza göre şekillendirmemize hatta yeni linkler yaratmamıza imkân vermektedir.

MongoDB

Açık kaynak kodlu olan ve doküman tabanlı veri modeli kullanan veri tabanı yönetim sistemidir. İlişkisel veri tabanı modellerine uymayan verilerin saklanması amacıyla 2000’li yılların ortalarında çıkan ilişkisel olmayan veri tabanı teknolojilerinden biridir. (Rouse, Botelho, & Vaughan, 2018) İlişkisel veri tabanı yapılarındaki tablolar yerine MongoDB’de koleksiyonlar, her bir kayıt için kullanılan satırlar yerine gene MongoDB’de dokümanlar vardır.

Mongoose

MongoDB veri tabanı yönetim sistemine Node.js üzerinden erişmek için kullanacağımız, verileri daha yapısal ve anlamlı yapılar şeklinde saklamamızı sağlayacak şemalar üretmeye yarayan bir JavaScript kütüphanesidir. MongoDB üzerinden gelecek nesneleri JavaScript nesnelerine çevirmede kullanılır.

Visual Studio Code

Microsoft tarafından Windows, Linux ve macOS işletim sistemleri için geliştirilmiş açık kaynak kodlu kaynak kod editörüdür. Visual Studio Code, destek olan geliştiriciler ve kuruluşlar sayesinde birçok eklentiye sahiptir ve kullanıcılar tarafından kolayca kişiselleştirilebilir yapısı vardır.

71 Postman

Abhinav Asthana adında bir programcı tarafından yaratılan, web servislerini test etmek için amacıyla üretilmiş bir araçtır. (Postman, 2019) HTTP istekleri atarak web servislere gönderilen verinin serviste sergileyeceği davranışı ya da servisin döndüreceği yanıtın izlenmesinde kullanılır. Yukarıda bahsedilen tüm teknolojiler gibi Postman’ de açık kaynak olup ücretsiz kullanıma sunulmuştur.

Sistem Mimarisi

React Native mobil uygulaması ve GraphQL destekli Node.js server uygulamasından oluşan sistemin mimarisi Şekil 1’de gösterilmektedir.

Şekil 1: Sistem Mimarisi

72

Kullanıcı, uygulama ile etkileşime geçerek bir işlem talebinde bulunur. Bu işlem servera oyun sonu verisi gönderme, sisteme giriş yapma ya da yeni hesap oluşturma gibi birçok türde olabilir.

Mobil uygulama, işlem türüne göre gerekli olan query ya da mutation yapısını oluşturup Apollo Client’ yapısına bu talebi iletir.

Apollo Client talep edilen operasyon türünün mutation olup olmadığına bakar ve mutation ise direkt olarak talebi linklerin bulunduğu katmana yollayarak link işlemlerini başlatır ve sonucunda bir HTTP isteği oluşturulur. HTTP isteğinin sonucu Apollo Cache yapısına sonraki taleplerde kullanmak üzere yazılıp ilgili bileşene iletilir. Link işlemlerinin halledildiği katmanı aslında bizim ağ katmanımız olarak görebiliriz. Bu açıdan bakıldığında gönderilecek HTTP istekleri ile ilgili tüm işlemleri burada yapmamız gerekmektedir. Örneğin alınan hataları çözümleme, yapılan isteklerin log kayıtlarını oluşturma ve HTTP başlıklarını belirleme gibi birçok işlemi bu katmanda halletmemiz mümkünüdür (Apollo Client).

Eğer gerçekleştirilecek işlem Query ise network policy adı verilen bir değere göre akış devam eder. Uygulama içerisinde yalnızca cache-first ve network only policy türleri kullanılmasına karşın kütüphane, farklı fonksiyonellikler sağlayan başka policy türleri de barındırmaktadır. Bu türler hakkında bilgi almak için Apollo Client web sitesinden faydalanabilirsiniz.

Eğer policy cache-first ise Apollo Client içinde barındırdığı cache yapısına ilerler ve talep edilen verinin varlığını sorgular. Veri cache içerisinde bulunuyorsa veriyi ilgili bileşene iletir. Eğer veri Apollo Cache içerisinde bulunmuyorsa ya da policy network-only ise kütüphane yeniden link katmanına yönelip ilgili HTTP isteğini oluşturur ve gönderir. Son olarak da gelen cevabı cache içerisine kaydedip ilgili bileşene iletir.

Sistemde kullanılmakta olan veri tabanı yapısı ise Şekil 2’de gösterilmektedir.

Şekil 2: Veri Tabanı Diyagramı

Kullanıcı dokümanları User adı verilen doküman tipinde tutulurken her oyununun sonunda kullanıcının performansını ölçmekte kullanmak için toplanılan veriler Analysis adlı doküman tipinde tutulmaktadır. Sistemde bulunan oyunlar ve bu oyunların görsel içerik linkleri ise Game doküman tipinde tutulmaktadır.

73

3. UYGULAMA - OYUN DETAYLARI

Belgede Engelsiz bilişim 2019 (sayfa 74-78)