Apa itu ORM, bagaimana cara kerjanya, dan bagaimana saya harus menggunakannya? [Tutup]

230

Seseorang menyarankan agar saya menggunakan ORM untuk proyek yang saya rancang, tetapi saya kesulitan menemukan informasi tentang apa itu atau bagaimana cara kerjanya.

Adakah yang bisa memberi saya penjelasan singkat tentang apa itu ORM dan bagaimana cara kerjanya dan bagaimana saya harus mulai menggunakannya?

Ryan
sumber
8
Saya menemukan pertanyaan ini tetapi dari 2009 dan saya tidak tahu apakah Anda sudah menguasai ORM tetapi mencari Entity Framework di CodePlex C # ( entityframework.codeplex.com ) Berikut adalah kode sumber yang dapat Anda pelajari. Anda juga bisa membaca ini. ( dbtechnet.org/labs/dae_lab/Orm.pdf )
Maximus Decimus
1
Hanya ingin menunjukkan bahwa cam ORM juga berhubungan dengan Object-Role Modeling en.wikipedia.org/wiki/Object-role_modeling
O-9
1
Ini adalah pertanyaan yang berguna dan suara untuk jawaban teratas sepertinya mengkonfirmasi hal itu. Penjelasan singkat tentang ORM tidak membutuhkan opini. Hanya karena pengguna meminta tautan untuk memulai, pertanyaan tersebut ditandai di luar topik. Saya merasa ini adalah reaksi berlebihan yang sering dari moderator.
NeilG
3
@NeilG Pertanyaan tertutup berarti pertanyaan di luar topik. Mungkin ada info yang berguna dalam jawaban, tetapi itu tidak membuat pertanyaan sesuai topik. Juga, itu tidak akan dihapus, itu akan tetap di sini, tetapi kita masih perlu menjaga SO tetap bersih dan sesuai topik sehingga berfungsi dengan baik. Jadi, untuk menjawab komentar pertama Anda: Ini bukan pertanyaan yang berguna, ada jawaban yang berguna.
M--
1
@NeilG Masalahnya adalah bahwa pertanyaan tersebut mencakup permintaan sumber daya (baik dalam judul maupun pertanyaan). Permintaan semacam itu di luar topik, sebagian besar karena mengakibatkan orang hanya memposting tautan ke sumber daya favorit mereka, seperti yang terjadi pada beberapa jawaban di sini. Menghapus permintaan sumber daya dari pertanyaan akan membuat beberapa jawaban yang ada tidak valid. Sebagai pengguna biasa, kami tidak diizinkan untuk mengedit pertanyaan menjadi jawaban yang tidak valid. Jadi, itu harus ditutup. Jika pertanyaan itu tidak terjawab, maka itu dapat diedit untuk menghapus permintaan tersebut dan dibiarkan terbuka.
Makyen

Jawaban:

482

pengantar

Pemetaan Relasional Objek (ORM) adalah teknik yang memungkinkan Anda membuat kueri dan memanipulasi data dari database menggunakan paradigma berorientasi objek. Ketika berbicara tentang ORM, kebanyakan orang mengacu pada perpustakaan yang mengimplementasikan teknik Pemetaan Relasional Objek, oleh karena itu frasa "ORM".

Pustaka ORM adalah pustaka biasa yang ditulis dalam bahasa pilihan Anda yang merangkum kode yang diperlukan untuk memanipulasi data, jadi Anda tidak lagi menggunakan SQL; Anda berinteraksi langsung dengan objek dalam bahasa yang sama dengan yang Anda gunakan.

Misalnya, berikut adalah kasus imajiner sepenuhnya dengan bahasa palsu:

Anda memiliki kelas buku, Anda ingin mendapatkan kembali semua buku yang penulisnya adalah "Linus". Secara manual, Anda akan melakukan hal seperti itu:

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);
}

Dengan pustaka ORM, akan terlihat seperti ini:

book_list = BookTable.query(author="Linus");

Bagian mekanis ditangani secara otomatis melalui perpustakaan ORM.

Pro dan kontra

Menggunakan ORM menghemat banyak waktu karena:

  • KERING : Anda menulis model data hanya di satu tempat, dan lebih mudah untuk memperbarui, memelihara, dan menggunakan kembali kode.
  • Banyak hal dilakukan secara otomatis, dari penanganan database hingga I18N .
  • Ini memaksa Anda untuk menulis kode MVC , yang pada akhirnya membuat kode Anda sedikit lebih bersih.
  • Anda tidak perlu menulis SQL dengan format yang buruk (sebagian besar programmer Web benar-benar payah, karena SQL diperlakukan seperti bahasa "sub", padahal sebenarnya itu sangat kuat dan kompleks).
  • Sanitasi; menggunakan pernyataan atau transaksi yang disiapkan semudah memanggil metode.

Menggunakan pustaka ORM lebih fleksibel karena:

  • Ini cocok dengan cara alami pengkodean Anda (itu bahasa Anda!).
  • Ini mengabstraksi sistem DB, sehingga Anda dapat mengubahnya kapan pun Anda mau.
  • Model terikat dengan lemah ke aplikasi lainnya, sehingga Anda dapat mengubahnya atau menggunakannya di mana pun.
  • Ini memungkinkan Anda menggunakan kebaikan OOP seperti warisan data tanpa sakit kepala.

Tapi ORM bisa menyebalkan:

  • Anda harus mempelajarinya, dan perpustakaan ORM bukanlah alat yang ringan;
  • Anda harus mengaturnya. Permasalahan yang sama.
  • Performa oke untuk kueri biasa, tetapi master SQL akan selalu bekerja lebih baik dengan SQL miliknya untuk proyek besar.
  • Ini mengabstraksi DB. Meskipun tidak apa-apa jika Anda tahu apa yang terjadi di balik layar, ini adalah jebakan bagi pemrogram baru yang dapat menulis pernyataan yang sangat serakah, seperti pukulan keras dalam satu forputaran.

Bagaimana cara mempelajari ORM?

Nah, gunakan satu. Library ORM mana pun yang Anda pilih, semuanya menggunakan prinsip yang sama. Ada banyak pustaka ORM di sekitar sini:

Jika Anda ingin mencoba pustaka ORM dalam pemrograman Web, Anda akan lebih baik menggunakan keseluruhan kerangka kerja seperti:

  • Symfony (PHP, menggunakan Propel atau Doctrine).
  • Django (Python, menggunakan ORM internal).

Jangan mencoba menulis ORM Anda sendiri, kecuali Anda mencoba mempelajari sesuatu. Ini adalah pekerjaan yang sangat besar, dan yang lama membutuhkan banyak waktu dan pekerjaan sebelum menjadi dapat diandalkan.

e-satis
sumber
50

Adakah yang bisa memberi saya penjelasan singkat ...

Tentu.

ORM adalah singkatan dari "Object to Relational Mapping" dimana

  • Bagian Objek adalah yang Anda gunakan dengan bahasa pemrograman Anda (python dalam kasus ini)

  • Bagian Relasional adalah Sistem Manajer Basis Data Relasional (Basis data yang ada) ada jenis basis data lain tetapi yang paling populer adalah relasional (tahu tabel, kolom, pk fk dll misalnya Oracle MySQL, MS-SQL)

  • Dan akhirnya bagian Pemetaan adalah tempat Anda melakukan jembatan antara objek dan tabel Anda.

Dalam aplikasi di mana Anda tidak menggunakan kerangka ORM, Anda melakukan ini dengan tangan. Menggunakan kerangka ORM akan memungkinkan Anda mengurangi boilerplate yang diperlukan untuk membuat solusi.

Jadi katakanlah Anda memiliki benda ini.

 class Employee:
      def __init__( self, name ): 
          self.__name = name

       def getName( self ):
           return self.__name

       #etc.

dan meja

   create table employee(
          name varcar(10),
          -- etc  
    )

Menggunakan kerangka kerja ORM akan memungkinkan Anda untuk memetakan objek itu dengan catatan db secara otomatis dan menulis sesuatu seperti:

   emp = Employee("Ryan")

   orm.save( emp )

Dan minta karyawan itu dimasukkan ke dalam DB.

Ups, ini tidak sesingkat itu, tetapi saya harap ini cukup sederhana untuk menangkap artikel lain yang Anda baca.

OscarRyz
sumber
17

ORM (Object Relational Mapper) adalah bagian / lapisan perangkat lunak yang membantu memetakan Objek kode Anda ke database Anda.

Beberapa menangani lebih banyak aspek daripada yang lain ... tetapi tujuannya adalah untuk menghilangkan sebagian bobot Lapisan Data dari pundak pengembang.

Ini klip singkat dari Martin Fowler (Data Mapper):

Pola Pemetaan Data Arsitektur Aplikasi Perusahaan

Justin Niessner
sumber
4

Seperti semua akronim, itu ambigu, tapi saya berasumsi maksudnya pemeta objek-relasional - cara untuk menutupi mata Anda dan membuat percaya bahwa tidak ada SQL di bawahnya, melainkan semua objek ;-). Tentu saja tidak benar, dan bukannya tanpa masalah - Jeff Atwood yang selalu penuh warna menggambarkan ORM sebagai Vietnam CS ;-). Tetapi, jika Anda tahu sedikit atau tidak sama sekali SQL, dan memiliki masalah yang cukup sederhana / berskala kecil, mereka dapat menghemat waktu Anda! -)

Alex Martelli
sumber
2

Model Objek berkaitan dengan tiga konsep berikut Data Abstraksi Enkapsulasi Pewarisan Model relasional menggunakan konsep dasar dari suatu relasi atau tabel. Produk pemetaan objek-relasional (OR mapping) mengintegrasikan kemampuan bahasa pemrograman objek dengan database relasional.

Hamza Riaz
sumber