Ürün Tanımı

Yazılım mühendisliğinde kullandığımız güçlü enstrümanlardan biri de "soyutlama" (abstraction). Bir yazılım kodunun tasarımını yaparken kavramsal anlamda birbirinden farklı işler yapan katmanları birbirinden ayırma pratikleri kullanırız. Böylece hem her katmanın kendi görev alanını, hem de o katmana özel bir bağımsızlık tanımlamış oluruz. Bu da yine yazılım mühendisliği açısından oldukça kıymetli olan ölçülebilirlik ve test edilebilirlik gibi çıktılar elde etmemizi sağlar.

Hex Functions tam olarak da bu soyutlama kısmında geliştirilen yazılımın "uygulama mantığı" (application logic) ile platform gereksinimlerini izole etmek için yola çıkıyor. Oluşturduğu izolasyon ile platformun gerçeklerinden bağımsız, yazılan kodun ölçülebilir, ölçeklenebilir ve test edilebilir bir doğallıkta kalmasını garanti ediyor.

İhtiyaç - Problem

Bir uygulama mantığını kodlarken genellikle o platform için oluşturulan bir proje yapısı ve/veya boilerplate'e, yine o platforma ait sağlayıcı (provider) adaptasyonlarını dahil ederek yazılım geliştiririz.

Diyelim bir web uygulaması yazacağız, ornek.com/selam?isim=eser adresine gittiğimizde tarayıcı (browser) ekranında "selam eser" yazsın istiyoruz. Bunun için eğer bir web uygulaması geliştiriyorsak express, flask, sinatra, slim, silex, lumen gibi bir uygulama çatısının başlangıç proje yapısını oluşturup bu çatının bize sağladığı nesneleri kullanarak gereken çalışmayı tamamlarız.

Elbette ki bahsettiğimiz web uygulaması eğer bir serverless yapı ise, AWS Lambda gibi bir ürüne function yazacağımızda o platform için yapmış olduğumuz çalışmayı tekrar etmemiz, bu sefer o platformun doğasına kendimizi adapte etmemiz gerekecek.

Hatta yine yalnızca işlevi biraz önce bahsettiğimiz web uygulaması ile aynı olacak olmasına rağmen "selam eser" yazacak bir telegram bot'u oluşturacaksak, bu sefer telegram platformuna adapte olup uygulama mantığımızı o platformun sağladığı nesnelerle tekrar yazmamız gerekecek.

Ancak kavramsal olarak bir üst seviyeden baktığımız zaman yaptığımız iş "kullandığımız çatıya özel" aynı uygulama mantığını platforma adapte etmekten ibaret. Ve yaptığımız her adaptasyon yazılım mühendisliğinin tekrar kullanılabilirlik ve taşınabilirlik yaklaşımlarına ters üretimler oluyor.

Çözüm

Platform

Ekler

Örnek

Basit

// /src/appserver.js
import { router, route } from "<https://deno.land/x/hex/mod.ts>";
import functions from "./functions.js";

const routes = router(
    route("GET", "/hello/:name", functions.hello),
);

export {
    routes as default,
};
// /src/functions.js
import hello from "./functions/hello.js";

export {
    hello,
};
// /src/functions/hello.js
import { results } from "<https://deno.land/x/hex/mod.ts>";

function hello(input, context) {
    const message = `hello ${input.parameters.name}`;

    return results.text(message);
}

export {
    hello as default,
};

İleri Seviye