bylge-logo

    Bylge

    ORM(Object-Relational Mapping)

    ORM(Object-Relational Mapping), veri tabanından sorgu çekmenize ve verileri manipüle etmenizi sağlayan bir Object-Oriented paradigması tekniğidir. ORM'den bahse

    Picture of the Ali Söylemez

    Ali Söylemez

    @alisoylemez

    ORM(Object-Relational Mapping), veri tabanından sorgu çekmenize ve verileri manipüle etmenizi sağlayan bir Object-Oriented paradigması tekniğidir. ORM'den bahsedildiği zaman genellikle Object-Oriented tekniği kullanılarak oluşturulmuş olan kütüphaneler aklımıza gelir. Lakin, bu kütüphaneler ORM kendisini anlatmazlar, sadece ORM tekniği kullanılarak oluşturulmuş olan kütüphanelerdir.


    Bir ORM, programlama diline göre şekillendirilmiş veya yazılım dilinin gereklilikleri göz önüne alarak tasarlanmış olan, veritabanında verileri değiştirmenize, kayıt eklemenize veya sorgu çekmenize yarayan bir kütüphanedir. Projelerimizde kullanmış olduğumuz programlama dilleri(Nodejs, Java, Go vs) her projede farklılık gösterir. Programlama dilinin öğrenme süresine göre bu dilleri anlamak, kullanmak ve uzman olmak hayli zaman ve tecrübe gerektirir. Server tarafından çalışmak eğer çok büyük bir projede değilseniz, tek başına yeterli değildir. Özellikle orta ve küçük ölçekli projelerde Backend veya Full Stack Developer'in veri tabanı işlemlerini de halletmesi gerekir.


    Veri tabanı işlemleri ise kullanmış olduğunuz veri tabanı tipine göre SQL ve NoSQL olabilir. Bunlar arasında farklı veri tabanı(SQL, MongoDB, PostgreSQL) tiplerini kullandığınız projeye uygun kullanmak ayrıca bir iş yükü getirir. Eğer proje orta boyutluysa sadece yüzeysel olarak veri tabanı dilini bilmek yeterli olmaz. Optimization, validation, getter, setter, trigger, transaction vb. daha sayamacağımız bir çok işlem bilmek ve kullanmak gerekir. Çünkü, bunlar yeteri kadar iyi kullanmadığında veri tabanında tutarsızlık ve ciddi performans problemleri yaşarsınız. Veri tabanı dilleri her ne kadar bize güzel faydaları olsada kompleks programlardır ve programlama dilinden farklı bir konseptle çalışırlar. Tam bu noktada ORM devreye girer ve veri tabanını kullanmış olduğunuz programlama dili aracılığıyla soyutlayarak, tablolarınızı ve dokümanlarınızı nesneler aracığıyla yönetmenize yardımcı olur. Bu şekilde çok alt seviye ve uzmanlık isteyen veri tabanı işlemlerini ORM'ler sayesinde hızlıca yerine getirirsiniz.



    bylge.com ’un ilk versiyonunda GraphQL server kullandım. GraphQL serverla birlikte SQL öğrenmek istemediğim için veri tabanın üzerinde Prisma ORM’ini projeye entegre ettim. Bu şekilde SQL 'de uzmanlaşmak için gerekli olan enerjimi projenin client tarafına veya backend tarafına aktardım. Aynı zamanda ORM ile hazır olarak bir sürü özelliği zahmetsiz nesneler yoluyla yönetebildim. Benim için projeye başlatırken gerçekten müthiş bir kolaylık sağladı. Hala kullanmaya devam ediyorum ve bırakmaya da kısa zamanda düşünmüyorum.


    Kısa ORM Örnekleme

    İsterseniz nesne ile tablolarınız nasıl yönetebileceğinizi SQL ve birkaç tane ORM kullanarak farkını anlamaya çalışalım. SQL kullanarak, Bylge organizasyonlarına ait kullanıcıları çekmek istesek aşağıdaki gibi bir sorgu yazmamız gerekiyor.


    SQL Tüm Kişiler Sorgusu

    Select * From USER where organization = “Bylge”


    yukarıdaki SQL sorgusu çok basit bir sorgu isterseniz tabi bu sorgu çok derine inebilir, ama bizim için konuyu anlamamız için fazlasıyla yeterli. Prisma ORM ile bu sorguyu çekmek istediğimizde gördüğünüz gibi standart bir JS kodu yazıyorum.


    Prisma ORM Kişiler Sorgusu

    await prisma.users.findMany({

    where: {

    organization: “Bylge”

    }})


    Yukarıda gördüğünüz gibi SQL bilmeme gerek yok sadece NodeJS ile sorgulamalarımı gönderebilir, update edebilir veya silebilirim. GraphQL değilde Express veya NextJS ise bununla birlikte Sequelize veya Knex.js ORM’lerinde Bylge organizasyonunu ait kullanıcıları çekmeye çalışırsak şöyle bir kod yazmamız gerekecek;


    Sequelize ORM Kişiler Sorgusu

    User.findAll({

    where: {

    authorId: 2

    }

    });


    Yukarıda da görüldüğü gibi ORM'lerin apileri arasında biraz farklılık olsada temelinde nesneleri kullanarak verisel işlemlerimizi yapıyoruz. ORM’ler sadece SQL sorgu dillerine münhasır değil. MongoDB, CouchDB, Redis vb. NoSQL veritabanlarında da kendine ait ORM'leri var.



    ORM(Object-Relational_Mapping)



    ORM Kullanmalımıyım?

    Yazılımla haşır neşir olan her arkadaşımın bildiği gibi dünyada en iyi yazılım dili diye bir şey yok. Her yazılımın veya aynı yazılım içindeki farklı tekniklerin kendilerine göre artıları ve eksileri olur. ORM içinde aynı koşul geçerli. ORM, kesinlikle veri tabanları dillerinden daha iyi demek ne kadar yanlış ise, ORM kesinlikle veri tabanları dillerinden kesinlikle kötüdür demekte bir o kadar yanlış. Burada kullanmalımıyım sorusunu sizin yerinize bir başkasını tayin etmesi çok mümkün değil. Kendiniz aşağıda bir kısmını listelediğim artıları ve eksileri dikkate alarak seçiminizi yapmanız gerekiyor.


    Aşağıda yazacağım maddeleri tek tek incelemek lazım. Ancak, arkadaşlar genelde bana çok uzun yazdığımdan dolayı şikateyette bulunuyorlar. Bunların bir kısmı sizin için anlaşılır olabilir, bir kısmı ise tam kafanızda şekillenmeyebilir. Eğer sorularınız olursa lütfen yorumlarda belirtin, ölmezde sağ kalırsam cevaplamaya çalışırım.


    ORM Kullanmanın Faydaları


    ORM Kullanmanın Zararları




    Published Date:

    December 21, 2020

    Updated Date:

    December 02, 2023