ORM(Object-Relational Mapping)

Dec 21, 20204 dakika

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 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ı

  • Veri modellerinizi tek bir yerde yazarsınız. Bakımını yapmak ve güncellemek kolaydır, kodlar tekrar tekrar kullanabilir.
  • Çoğu alt seviye veritabanı işlemleri sizin yerinize ORM tarafından halledilir.
  • Sizi MVC modeline göre kod yazmaya zorlar. Projenin sonunda çok daha temiz bir kodunuz olur.
  • Kötü SQL ve NoSQL kodları yazmak zorunda kalmazsınız.
  • Veri tabanı dilleri(DML veya DDL) çok güçlü diller olmasına rağmen, bir o kadar da kompleks ve karışıktır. Üst seviye dillerine göre öğrenmesi ve pratik olarak uygulanması zaman alır.
  • Programlama dilinizle birebir örtüştüğü için bir noktadan sonra artık veri tabanı ile çalışıyorsunuz gibi gelmez.
  • Veri tabanından sizi soyutlar ve istediğiniz zaman rahatlıkla başka ORM kullanabilirsiniz veya değişikliğe gidebilirsiniz.
  • Modeller gevşek olarak uygulamanıza bağlanır. İstediğiniz zaman değişikliğe gidebilirsiniz.
  • OPP bütün nimetlerinden yararlanırsınız.



ORM Kullanmanın Zararları

  • Programlama dilinizle yazılmış olsa bile öğrenmesi sanıldığı kadar kolay değildir. ORM'ler ağır programlardır, apiyi kullanmadan önce veri tabanı konseptini bilmek gerekir.
  • Projeye entegre etmek kolay değildir. Kimi zaman bunun için aracı programlar kullanmanız gerekir.
  • Normal veya çok kompleks olmayan sorgularda iyi performans gösterir. Eğer ağır bir programınız var ise veri taban dilleri ile mümkünse sizin için ilk seçenek olmalıdır.
  • Veri tabanı işlemlerini sizin için soyutladığı için, veri tabanında tam olarak ne gibi işlemler olduğunu kaçırabilirsiniz.







Küçük bir destek binlerce beğeniden daha değerlidir
https://bylge-images.s3.amazonaws.com/wheat-3241114_1920.jpg
Ali Söylemez

Hayattan muhâcir; eşyâdan öksüz?

Bylge Icon
Bylge Icon