Pertanyaan Apa itu Kerangka Pemetaan Objek-Relasional? [duplikat]


Pertanyaan ini sudah memiliki jawaban di sini:

Seperti kata judul; apa itu kerangka ORM dan apa gunanya itu?


74
2017-07-20 08:25


asal


Jawaban:


Dari wikipedia:

Pemetaan objek-relasional (ORM, O / RM,   dan O / R mapping) dalam perangkat lunak komputer   adalah teknik pemrograman untuk   mengonversi data antara tidak kompatibel   ketik sistem dalam basis data relasional   dan pemrograman berorientasi objek   bahasa. Ini menciptakan, pada dasarnya, a   "virtual object database" yang bisa   digunakan dari dalam pemrograman   bahasa. Ada keduanya gratis dan   paket komersial tersedia itu   melakukan pemetaan objek-relasional,   meskipun beberapa programmer memilih   membuat alat ORM mereka sendiri.

Ini bagus untuk mengabstraksi datastore (file datar / SQL / apa pun) untuk menyediakan antarmuka yang dapat digunakan dalam kode Anda. Sebagai contoh, (dalam rel) daripada membangun SQL untuk menemukan pengguna pertama di tabel pengguna, kita bisa melakukan ini:

User.first

Yang akan mengembalikan kami contoh model pengguna kami, dengan atribut pengguna pertama di tabel pengguna.


46
2017-07-20 08:27



Jawaban sederhana adalah bahwa Anda membungkus tabel Anda atau prosedur tersimpan di kelas dalam bahasa pemrograman Anda, sehingga alih-alih menulis pernyataan SQL untuk berinteraksi dengan database Anda, Anda menggunakan metode dan properti objek.

Dengan kata lain, daripada sesuatu seperti ini:

String sql = "SELECT ... FROM persons WHERE id = 10"
DbCommand cmd = new DbCommand(connection, sql);
Result res = cmd.Execute();
String name = res[0]["FIRST_NAME"];

Anda melakukan sesuatu seperti ini:

Person p = repository.GetPerson(10);
String name = p.FirstName;

atau kode serupa (banyak variasi di sini.) Beberapa kerangka kerja juga memasukkan banyak kode sebagai metode statis pada kelas itu sendiri, yang berarti Anda dapat melakukan sesuatu seperti ini sebagai gantinya:

Person p = Person.Get(10);

Beberapa juga menerapkan sistem permintaan yang rumit, sehingga Anda dapat melakukan ini:

Person p = Person.Get(Person.Properties.Id == 10);

Kerangka inilah yang memungkinkan kode ini.

Sekarang, manfaatnya. Pertama-tama, Anda menyembunyikan SQL dari kode logika Anda. Ini memiliki manfaat memungkinkan Anda lebih mudah mendukung lebih banyak mesin basis data. Misalnya, MS SQL Server dan Oracle memiliki nama yang berbeda pada fungsi yang khas, dan cara yang berbeda untuk melakukan perhitungan dengan tanggal, sehingga permintaan untuk "dapatkan saya semua orang yang diedit 24 jam terakhir" mungkin memerlukan sintaks SQL yang berbeda hanya untuk dua mesin database . Perbedaan ini dapat dijauhkan dari kode logika Anda.

Selain itu, Anda dapat fokus pada penulisan logika, alih-alih mendapatkan semua SQL yang benar. Kode biasanya akan lebih mudah dibaca juga, karena tidak mengandung semua "pipa" yang diperlukan untuk berbicara dengan database.


226
2017-07-20 08:29



Database biasanya bekerja pada model relasional: Anda memiliki tabel (menyederhanakan: seperti spreadsheet), dan hubungan di antara mereka - satu-ke-satu, satu-ke-banyak, banyak-ke-banyak, dll, yang berarti misalnya bahwa satu catatan dalam tabel A memiliki banyak catatan terkait di tabel B. Anda dapat mengambil data dari mereka sebagai baris (kumpulan nilai yang mewakili baris dari tabel / tabel) Lebih banyak di wikipedia.

Bahasa pemrograman modern menggunakan model objek. Objek memiliki metode, atribut (sederhana atau kompleks), dll.

Perangkat lunak ORM melakukan transisi antara model-model tersebut. Misalnya, menempatkan semua catatan terkait dari tabel B menjadi atribut objek A. Perangkat lunak semacam ini membuatnya lebih mudah menggunakan database relasional (paling populer) dengan bahasa pemrograman objek.


8
2017-07-20 08:32



Setiap kali Anda pergi dengan ORM (Object Relational Mapper) Anda akan menemukan DBAL (Database Abstraction Layer) berdampingan. Jadi perlu untuk mengetahui apa ini, sehingga mendapatkan wawasan yang baik dari apa yang Anda gunakan dan apa keuntungan yang akan Anda dapatkan.

DBAL (Lapisan Abstraksi Database) 

Berfungsi sebagai lapisan antara kode dan basis data Anda. Terlepas dari apa pun basis data Anda, kode yang ditulis akan berfungsi dengan baik dengan sedikit penyesuaian.

Asumsikan bahwa untuk proyek saat ini Anda menggunakan MySQL setelah sepenuhnya matang dan mendapatkan lalu lintas besar rencana tim Anda untuk mengalihkan database ke Oracle untuk beberapa alasan maka kode yang telah Anda tulis di MySQL harus ditulis ulang ke permintaan berbasis Oracle. Dan menulis ulang pertanyaan untuk seluruh proyek adalah tugas yang membosankan.

Sebaliknya jika Anda menggunakan pustaka DBAL maka Anda dapat mengganti konfigurasi database dan memastikan proyek Anda akan aktif dan berjalan dalam satu hari (Mungkin dengan beberapa perubahan kecil).

ORM (Object Relational Mapper)

Object Relational Mapping (ORM) adalah teknik (Pola Desain) untuk mengakses database relasional dari bahasa berorientasi objek.

Jika Anda telah menggunakan segala jenis kerangka seperti Symfony (jika Anda berasal dari latar belakang PHP) / Hibernate (Java), maka Anda akrab dengan ini. Tidak ada apa-apa kecuali Entitas.

Untuk mengakses database dalam konteks Berorientasi Objek dan antarmuka menerjemahkan logika objek diperlukan, antarmuka ini disebut sebagai ORM. Ini membuat objek yang memberikan akses ke data dan menjaga aturan bisnis dengan diri mereka sendiri.

Misalnya.

class User{
    private $email;

    private $password;

    public function setEmail($email){
        $this->email = $email;
        return $this;
    }

    public function getEmail(){
        return $this->email;
    }


    public function setPassword($password){
        $this->password = $password;
        return $this;
    }

    public function getPassword(){
        return $this->password;
    }
}

/* To save User details you would do something like this */
$userObj = new User();
$userObj->setEmail('sanitizedEmail');
$userObj->setPassword('sanitizedPassword');
$userObj->save();

/* To fetch user details you would do something like this */
$userObj = new User();
$userDetails = $userObj->find($id);

Misalnya. Doktrin, Mendorong, Kacang merah


5
2017-09-17 08:15



ORM aku s:

Sebuah abstraksi dan seperti abstraksi apa pun yang membuat hidup lebih mudah bagi Anda.


2
2017-07-20 08:32



Dari Wikipedia: http://en.wikipedia.org/wiki/Object-relational_mapping

Pemetaan objek-relasional (ORM, O / RM, dan O / R mapping) dalam perangkat lunak komputer adalah teknik pemrograman untuk mengkonversi data antara sistem jenis yang tidak kompatibel dalam basis data relasional dan bahasa pemrograman berorientasi objek. Ini menciptakan, pada dasarnya, sebuah "objek database virtual" yang dapat digunakan dari dalam bahasa pemrograman. Ada paket gratis dan komersial tersedia yang melakukan pemetaan relasional objek, meskipun beberapa programmer memilih untuk membuat alat ORM mereka sendiri.

Pro dan kontra ORM sering mengurangi jumlah kode yang perlu ditulis, membuat perangkat lunak lebih kuat (semakin sedikit baris kode dalam suatu program, semakin sedikit kesalahan yang terkandung di dalamnya). [1].

Ada biaya serta manfaat untuk menggunakan pemetaan O / R. Sebagai contoh, beberapa alat pemetaan O / R tidak berfungsi dengan baik selama penghapusan data secara massal. Prosedur yang tersimpan mungkin memiliki kinerja yang lebih baik tetapi tidak portabel.


0
2017-07-20 08:27



Ini memungkinkan Anda melakukan hal-hal seperti ini (ini adalah kode Doktrin):

$activeUsers = Doctrine::getTable('User')->createQuery('u')->addWhere('u.active = false');
foreach($activeUsers as $user)
{
   $user->active = true;
   $user->save();
}

0
2017-07-20 08:30



Pemetaan object-relational mapping (ORM) menyediakan pemetaan tabel basis data ini ke kelas objek domain.


0
2018-02-12 07:55