Sunday 4 September 2016

What Is ORM ?


Detailed info:

An ORM (Object-Relational Mapping) is a tool that lets you query and manipulate data from a database using an object paradigm.
It's a completely ordinary library written in your language that encapsulates the code needed to manipulate the data, so you don't use SQL anymore, but directly an object of your language.
E.G., a completely imaginary case with a pseudo language :
You have a book class, you want to retrieve all the books of which the author is "Linus". Manually, you would do something like that :

  1. book_list = new List();sql = "SELECT book FROM library WHERE author = 'Linus'";data = query(sql); // I over simplify ...while (row = data.next()){ book = new Book(); book.setAuthor(row.get('author'); book_list.add(book);}

With an ORM, it would look like that :
  1. book_list = BookTable.query(author="Linus");

The mechanical part is taken care automatically by the ORM.
Pros and cons
Using an ORM save a lot of time because :
  • DRY : You write your data model in only one place, it's easier to update, maintain and reuse the code.
  • A lot of stuff is done automatically, from the database handling to I18N.
  • It forces you to write MVC code, and in the end your app is cleaner.
  • You don't have to write poorly formed SQL (most Web programmers really suck at it, because SQL is treated like a "sub" language whereas it's a very powerful and complex one)
  • Sanitizing, using prepared statements or transactions are as easy as calling a method.
Using an ORM is more flexible because :
  • It fits in your natural way of coding (it's your language !)
  • It abstracts the DB system, so you can change it whenever you want.
  • The model is weakly binded to the rest of the app, so you can change it or use it anywhere else.
  • It let you use OOP goodness like data inheritance without head ache.
But ORM can be a pain :
  • You have to learn it, and they are not lightweight tools;
  • You have to set it up. Same problem.
  • Performances are ok for usual queries, but a SQL master will always do better with his little hands for the big dirty works.
  • It abstracts the DB. While it's ok if you know what's happening behind the scene, it's a trap for the noobs that can write very greedy statements, like a heavy hit in a for loop...
How to learn about them ?
Well, use one. What ever the one you choose, they all use the same principles. There are a lot of ORMs around here :
If you want to try an ORM in Web programming, you'd be better off using an entire framework stack like :
  • Symfony (PHP, using Propel or Doctrine)
  • Django (Python, using a internal ORM)

No comments:

Post a Comment