Jawaban saya yang panjang dan terlambat, bahkan tidak lengkap, tapi penjelasan yang bagus MENGAPA saya benci pola, opini, dan bahkan emosi ini:
1) versi singkat: Rekaman Aktif membuat " lapisan tipis " dari " ikatan kuat " antara database dan kode aplikasi. Yang memecahkan tidak logis, tidak ada masalah apa pun, tidak ada masalah sama sekali. IMHO tidak memberikan NILAI APA PUN, kecuali beberapa gula sintaksis untuk programmer (yang kemudian dapat menggunakan "sintaks objek" untuk mengakses beberapa data, yang ada dalam database relasional). Upaya untuk menciptakan kenyamanan bagi pemrogram harus (IMHO ...) sebaiknya diinvestasikan dalam alat akses basis data tingkat rendah, misalnya beberapa variasi hash_map get_record( string id_value, string table_name, string id_column_name="id" )
metode sederhana, mudah, sederhana dan serupa (tentu saja, konsep dan keanggunan sangat bervariasi dengan bahasa yang digunakan).
2) versi panjang: Dalam setiap proyek berbasis database di mana saya memiliki "kendali konseptual" atas berbagai hal, saya menghindari AR, dan itu bagus. Saya biasanya membangun arsitektur berlapis (Anda cepat atau lambat membagi perangkat lunak Anda dalam beberapa lapisan, setidaknya dalam proyek berukuran sedang hingga besar):
A1) database itu sendiri, tabel, relasi, bahkan beberapa logika jika DBMS memungkinkannya (MySQL juga sudah dewasa sekarang)
A2) sangat sering, ada lebih dari sekedar penyimpanan data: sistem file (gumpalan dalam database tidak selalu merupakan keputusan yang baik ...), sistem lama (bayangkan diri Anda "bagaimana" mereka akan diakses, banyak variasi yang mungkin .. tapi itu saja bukan itu intinya ...)
B) lapisan akses database (pada tingkat ini, metode alat, pembantu untuk dengan mudah mengakses data dalam database sangat diterima, tetapi AR tidak memberikan nilai apa pun di sini, kecuali beberapa gula sintaksis)
C) lapisan objek aplikasi: "objek aplikasi" terkadang berupa baris tabel sederhana dalam database, tetapi sebagian besar tetap merupakan objek gabungan , dan memiliki beberapa logika yang lebih tinggi, jadi menginvestasikan waktu dalam objek AR pada level ini jelas tidak berguna , membuang-buang waktu pembuat kode yang berharga, karena "nilai sebenarnya", "logika yang lebih tinggi" dari objek-objek itu perlu diimplementasikan di atas objek AR, bagaimanapun - dengan dan tanpa AR! Dan, misalnya, mengapa Anda ingin memiliki abstraksi "Objek entri log"? Kode logika aplikasi menulisnya, tetapi haruskah itu memiliki kemampuan untuk memperbarui atau menghapusnya? terdengar konyol, dan App::Log("I am a log message")
beberapa besaran lebih mudah digunakan daripadale=new LogEntry(); le.time=now(); le.text="I am a log message"; le.Insert();
. Dan misalnya: menggunakan "Objek entri log" dalam tampilan log di aplikasi Anda akan berfungsi untuk 100, 1000, atau bahkan 10.000 baris log, tetapi cepat atau lambat Anda harus mengoptimalkan - dan saya yakin dalam banyak kasus, Anda hanya akan gunakan pernyataan SQL SELECT kecil yang indah itu dalam logika aplikasi Anda (yang benar-benar merusak ide AR ..), alih-alih menggabungkan pernyataan kecil itu dalam bingkai ide AR tetap yang kaku dengan banyak kode yang membungkus dan menyembunyikannya. Waktu yang Anda buang dengan menulis dan / atau membuat kode AR bisa diinvestasikan dalam antarmuka yang jauh lebih pintar untuk membaca daftar entri log (banyak, banyak cara, langit adalah batasnya). Pembuat kode harus berani menemukan abstraksi baru untuk mewujudkan logika aplikasinya yang sesuai dengan aplikasi yang dimaksudkan, dan tidak dengan bodohnya menerapkan kembali pola konyol, kedengarannya bagus pada pandangan pertama!
D) logika aplikasi - mengimplementasikan logika objek yang berinteraksi dan membuat, menghapus, dan membuat daftar (!) Objek logika aplikasi (TIDAK, tugas-tugas tersebut jarang harus berlabuh di objek logika aplikasi itu sendiri: apakah selembar kertas di meja Anda memberi tahu Anda nama dan lokasi semua sheet lain di kantor Anda? lupakan metode "statis" untuk membuat daftar objek, itu konyol, kompromi buruk yang dibuat untuk membuat cara berpikir manusia cocok dengan [beberapa-tidak-semua-AR-framework-like -] berpikir AR)
E) antarmuka pengguna - yah, apa yang akan saya tulis di baris berikut sangat, sangat, sangat subjektif, tetapi menurut pengalaman saya, proyek yang dibangun di atas AR sering mengabaikan bagian UI dari aplikasi - waktu terbuang percuma untuk pembuatan abstraksi yang tidak jelas . Pada akhirnya, aplikasi semacam itu menyia-nyiakan banyak waktu pembuat kode dan terasa seperti aplikasi dari pembuat kode untuk pembuat kode, yang cenderung teknologi di dalam dan di luar. Para pembuat kode merasa baik (kerja keras akhirnya selesai, semuanya selesai dan benar, sesuai dengan konsep di atas kertas ...), dan pelanggan "hanya perlu belajar bahwa perlu seperti itu", karena itu "profesional" .. ok, maaf, saya ngelantur ;-)
Memang, memang, ini semua subjektif, tetapi ini pengalaman saya (Ruby on Rails tidak termasuk, mungkin berbeda, dan saya tidak memiliki pengalaman praktis dengan pendekatan itu).
Dalam proyek berbayar, saya sering mendengar permintaan untuk memulai dengan membuat beberapa objek "rekaman aktif" sebagai blok bangunan untuk logika aplikasi tingkat yang lebih tinggi. Dalam pengalaman saya, ini sering kali menyolokadalah semacam alasan bahwa pelanggan (perusahaan pengembang perangkat lunak dalam banyak kasus) tidak memiliki konsep yang baik, pandangan yang besar, gambaran tentang produk yang seharusnya. Pelanggan tersebut berpikir dalam bingkai yang kaku ("dalam proyek sepuluh tahun yang lalu ini bekerja dengan baik .."), mereka dapat menyempurnakan entitas, mereka dapat mendefinisikan relasi entitas, mereka dapat memecah hubungan data dan mendefinisikan logika aplikasi dasar, tetapi kemudian mereka berhenti dan menyerahkannya kepada Anda, dan berpikir hanya itu yang Anda butuhkan ... mereka sering kali tidak memiliki konsep yang lengkap tentang logika aplikasi, antarmuka pengguna, kegunaan, dan seterusnya ... mereka tidak memiliki pandangan yang besar dan mereka kurang menyukai detailnya, dan mereka ingin Anda mengikuti cara AR itu, karena .. yah, mengapa, itu berhasil dalam proyek itu bertahun-tahun yang lalu, itu membuat orang sibuk dan diam? Saya tidak tahu. Tapi "detail" pisahkan laki-laki dari laki-laki, atau .. bagaimana slogan iklan aslinya? ;-)
Setelah bertahun-tahun (sepuluh tahun pengalaman pengembangan aktif), setiap kali pelanggan menyebutkan "pola rekaman aktif", bel alarm saya berdering. Saya belajar untuk mencoba membawa mereka kembali ke fase konsepsi yang penting , membiarkan mereka berpikir dua kali, mencoba mereka untuk menunjukkan kelemahan konseptional mereka atau hanya menghindarinya sama sekali jika mereka tidak mengerti (pada akhirnya, Anda tahu, pelanggan yang belum tahu apa yang diinginkannya, bahkan mungkin berpikir dia tahu tetapi tidak, atau mencoba untuk mengeluarkan konsep kerja kepadaKU secara gratis, menghabiskan banyak waktu, hari, minggu dan bulan yang berharga untuk waktu saya, hidup terlalu singkat ...).
Jadi, akhirnya: INI SEMUA adalah mengapa saya benci "pola rekaman aktif" konyol itu, dan saya lakukan dan akan menghindarinya bila memungkinkan.
EDIT : Saya bahkan akan menyebut ini Tanpa Pola. Itu tidak menyelesaikan masalah apa pun (pola tidak dimaksudkan untuk membuat gula sintaksis). Ini menciptakan banyak masalah: akar dari semua masalahnya (disebutkan dalam banyak jawaban di sini ..) adalah, bahwa ia hanya menyembunyikan SQL lama yang dikembangkan dengan baik dan kuat di belakang antarmuka yang menurut definisi pola sangat terbatas.
Pola ini menggantikan fleksibilitas dengan gula sintaksis!
Coba pikirkan, masalah apa yang dipecahkan AR untuk Anda?