Saya ingin mendengar dari mereka yang telah menggunakan Ajaran 2 (atau lebih baru) dan Propel 1.5 (atau lebih baru). Sebagian besar perbandingan antara dua objek pemetaan relasional ini didasarkan pada versi lama - Doktrin 1 versus Propel 1.3 / 1.4, dan kedua ORM mengalami perancangan ulang yang signifikan dalam revisi terbaru mereka. Sebagai contoh, sebagian besar kritik terhadap Propel tampaknya berpusat di sekitar kelas "ModelName Peer ", yang sudah usang dalam 1,5 dalam hal apa pun.
Inilah yang saya kumpulkan sejauh ini (Dan saya sudah mencoba membuat daftar ini seimbang mungkin ...):
- Mendorong
- Pro
- Sangat ramah IDE, karena kode aktual dihasilkan, alih-alih mengandalkan metode ajaib PHP. Ini berarti fitur IDE seperti penyelesaian kode benar-benar bermanfaat.
- Cepat (Dalam hal penggunaan basis data - tidak ada introspeksi runtime yang dilakukan pada basis data)
- Bersihkan migrasi antar versi skema (setidaknya dalam 1,6 beta)
- Dapat menghasilkan model PHP 5.3 (yaitu namespaces)
- Mudah untuk mengaitkan banyak hal menjadi satu permintaan basis data tunggal dengan hal-hal seperti
useXxx
metode. (Lihat video "penyelesaian kode" di atas)
- Cons
- Membutuhkan langkah membangun ekstra, yaitu membangun kelas model.
- Kode yang dihasilkan perlu dibangun kembali setiap kali versi Propel diubah, pengaturan diubah, atau skema berubah.
Ini mungkin tidak intuitif untuk beberapa dan metode khusus yang diterapkan pada model hilang. (Saya pikir?)- Tidak benar; metode kustom tidak hilang karena kelas yang dihasilkan adalah kelas dasar; Propel menyediakan kelas entitas khusus untuk ekstensi. - Beberapa fitur yang bermanfaat (yaitu perilaku versi, migrasi skema) dalam status beta.
- Pro
- Doktrin
- Pro
- Lebih populer
- Doctrine Query Language dapat mengungkapkan hubungan antar data yang berpotensi lebih rumit daripada yang mungkin dengan mudah dengan strategi ActiveRecord Propel.
- Lebih mudah untuk menambahkan perilaku yang dapat digunakan kembali jika dibandingkan dengan Propel.
- Mengomentari berdasarkan DocBlock untuk membangun skema tertanam dalam PHP sebenarnya, bukan file XML yang terpisah.
- Menggunakan PHP 5.3 Ruang nama di mana-mana
- Cons
- Membutuhkan pembelajaran bahasa pemrograman yang sepenuhnya baru (Bahasa Ajaran Ajaran)
- Diimplementasikan dalam hal "metode ajaib" di beberapa tempat, membuat IDE autocomplete tidak berharga.
- Membutuhkan introspeksi basis data dan karenanya sedikit lebih lambat dari Propel secara default; caching dapat menghapus ini tetapi caching menambahkan kompleksitas yang cukup besar.
- Lebih sedikit perilaku termasuk dalam basis kode inti. Beberapa fitur yang disediakan Propel di luar kotak (seperti Nested Set) hanya tersedia melalui ekstensi.
- Freakin 'BESAR :)
- Pro
Ini saya dapatkan hanya melalui membaca dokumentasi yang tersedia untuk kedua alat - saya belum benar-benar membangun apa pun.
Saya ingin mendengar dari mereka yang telah menggunakan kedua alat, untuk berbagi pengalaman mereka tentang pro / kontra dari setiap perpustakaan, dan apa rekomendasi mereka pada saat ini :)
Jawaban:
Terlepas dari tren saat ini untuk merekomendasikan Ajaran, saya perlu mengatakan sebaliknya. Perlu diingat bahwa juga, preferensi pribadi saya berorientasi pada pengalaman pribadi saya, tetapi bagaimana @Dan berkata, mereka berdua sangat kuat.
Saya tidak suka Doktrin karena beberapa alasan yang Anda sebutkan sebelumnya, seperti ukuran dan seluruh metode sihir yang penting adalah kesepakatan dengan saya. Jadi, saya menggunakan Propel , mengapa? terutama karena kesederhanaannya, dan karena sederhana dalam pengembangan perangkat lunak adalah baik . Kepercayaan pribadi saya adalah bahwa menjadi serakah dengan desain itu buruk.
Menggunakan Propel, saya telah berhasil menerapkan implementasi pola repositori untuk sistem saya sendiri, dan itu bekerja dengan sangat baik, belum lagi kinerja Propel, yang merupakan salah satu ORM fastest yang pernah saya lihat.
Jadi, jawaban dasar saya adalah Propel , karena ini menyelesaikan perangkat lunak yang baik dengan kode lebih sedikit dan memberdayakan IDE untuk memberi Anda intellisense yang baik tanpa kehilangan titik perangkat lunak ORM yang terhubung ke database dan melakukannya dengan baik ...
Semoga saya bisa membantu
sumber
Informasi Anda tentang Doctrine 2 salah ...
Saya belum pernah menggunakan Propel sebelumnya, tetapi Doctrine 2 jauh lebih baru dan memiliki basis kode berkualitas sangat tinggi. Tetapi sepertinya Propel menggunakan Rekaman Aktif, Doctrine 2 menggunakan pola Data Mapper.
Kelemahan dari Doctrine 2 menjadi lebih baru adalah kurangnya contoh pihak ketiga, tetapi dengan cepat bertambah.
Saya merekomendasikan Ajaran 2 ...
sumber
__get
dan__set
(yang benar) daripada metode nyata.Dari komentar Anda, sepertinya Anda mencoba memilih Propel atau Doctrine untuk menggantikan atau memenuhi kebutuhan Anda akan ORM dalam aplikasi lawas.
Yang sedang berkata, saya pikir penting untuk tidak melupakan fakta bahwa pindah ke salah satu dari itu bisa menjadi peningkatan besar untuk aplikasi Anda. Jadi, tidak ada jawaban yang salah.
Oleh karena itu, solusi yang Anda pilih sebagian besar terserah preferensi Anda berdasarkan pada jawaban Anda atas pertanyaan-pertanyaan berikut:
Secara pribadi, saya akan merekomendasikan Doktrin 2 karena komunitas, dokumentasi, dan arsitekturnya.
sumber
Saya sarankan Anda Propel karena terintegrasi dengan baik, cepat, dan kuat. Untuk menghasilkan kode lebih baik daripada memuat kelas saat runtime, ini memudahkan langkah debug dan menunjukkan kepada Anda apa yang telah Anda buat. Jadi langkah build bukan masalah.
Doctrine2 tidak memiliki perilaku resmi, dan pola desain DataMapper keren tetapi sulit digunakan dalam kehidupan nyata. Oh dan DQL adalah bahasa yang sulit, namun sulit untuk dipelajari ...
Jika Anda ingin berpikir dengan objek (tanpa DQL / SQL / apa pun), pilih Propel.
Doctrine2 adalah bagian dari Symfony2 de facto tetapi semuanya akan segera bergerak, lihat artikel Fabien Potencier terakhir.
Cheers, William
sumber
Keduanya sangat baik. Ada beberapa kasus tepi di mana seseorang dapat melakukan sesuatu, atau melakukan sesuatu yang lebih baik, daripada yang lain. Di mana pun saya mengalami masalah dengan baik, itu lebih karena kurangnya pengetahuan saya daripada sesuatu yang mereka tidak bisa lakukan.
Ini berarti bahwa dokumentasi dan dukungan lebih penting daripada kemampuan intrinsik kode. Apakah Anda mengenal seseorang yang dapat membantu Anda ketika Anda mengalami masalah? Seberapa baik Anda melanjutkan dokumentasi? Apakah salah satunya hanya 'terasa' lebih alami bagi Anda?
sumber
Saya memilih Propel 1.63 untuk aplikasi mysql lama yang besar (sekitar 200 tabel) - faktor-faktor di sini termasuk: dukungan IDE yang memungkinkan pengembang baru untuk menemukan jalan mereka dengan mudah dengan penyelesaian kode; dukungan skema lintas basis data, kinerja; dukungan penduduk asli yang lebih baik untuk enum dan penggunaan beberapa perilaku. Sebenarnya saya mulai dengan Doktrin karena ini adalah yang terbaik didukung oleh Symfony2 tetapi sekali Propel sangat meningkatkan dukungan mereka dengan Symfony (platform berikutnya saya akhirnya akan pindah ke) saya beralih karena penanganan yang lebih baik dari masalah di atas. Tidak ada penyesalan sama sekali Propel adalah pemenang yang menentukan.
sumber