Saya memulai proyek baru dengan symfony yang sudah terintegrasi dengan Doctrine dan Propel , tetapi saya tentu saja harus membuat pilihan .... Saya bertanya-tanya apakah orang yang lebih berpengalaman di luar sana memiliki pro dan / atau kontra umum untuk pergi bersama salah satu dari dua ini?
Terima kasih banyak.
Sunting: Terima kasih atas semua tanggapan, hal-hal yang bermanfaat. Tidak ada jawaban yang benar-benar benar untuk pertanyaan ini jadi saya hanya akan menandai sebagai menyetujui orang yang mendapat suara terbanyak yang populer.
Jawaban:
Saya akan pergi dengan Doktrin. Tampaknya bagi saya bahwa ini adalah proyek yang jauh lebih aktif dan menjadi ORM default untuk symfony itu lebih baik didukung (meskipun secara resmi ORM dianggap sama).
Selain itu saya lebih suka cara Anda bekerja dengan kueri (DQL daripada Kriteria):
(Implementasi Ajaran jauh lebih intuitif bagi saya).
Juga, saya benar-benar lebih suka cara Anda mengelola hubungan dalam Ajaran.
Saya pikir halaman ini dari dokumentasi Doctrine layak dibaca: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Singkatnya: Jika saya memulai proyek baru atau harus memilih antara mempelajari Ajaran dan Propel, saya akan pergi untuk Ajaran kapan saja.
sumber
Saya bias, karena saya sedikit membantu pada rilis Propel berikutnya, tetapi Anda harus mempertimbangkan bahwa Propel memang ORM pertama yang tersedia, kemudian sedikit tertinggal ketika Doctrine dibuat, tetapi sekarang memiliki pengembangan aktif lagi. Symfony 1.3 / 1.4 hadir dengan Propel 1.4, di mana sebagian besar perbandingan berhenti di Propel 1.3. Juga, rilis Propel berikutnya (1,5) akan berisi banyak perbaikan, terutama dalam pembuatan Kriteria Anda (menghasilkan lebih sedikit kode untuk Anda tulis).
Saya suka Propel karena tampaknya kurang kompleks daripada Doktrin: sebagian besar kode ada di beberapa kelas yang dihasilkan, sedangkan Doktrin telah membagi fungsi di banyak kelas. Saya suka memiliki pemahaman yang baik tentang perpustakaan yang saya gunakan (tidak terlalu banyak "sihir"), tetapi tentu saja, saya memiliki lebih banyak pengalaman dengan Propel, jadi mungkin Doktrin tidak begitu rumit di belakang layar. Beberapa mengatakan Propel lebih cepat, tetapi Anda harus memeriksanya sendiri, dan mempertimbangkan apakah ini melebihi perbedaan lain.
Mungkin Anda juga harus mempertimbangkan ketersediaan plugin Symfony untuk kerangka kerja yang berbeda. Saya percaya Propel memiliki kelebihan di sini, tetapi saya tidak tahu berapa banyak plugin yang terdaftar masih up-to-date dengan versi terbaru dari Symfony.
sumber
Itu datang ke preferensi pribadi. Saya menggunakan Propel karena (antara lain) Saya suka fakta bahwa semuanya memiliki metode pengambil & penyetel beton sendiri. Dalam Ajaran, ini tidak terjadi.
Mendorong:
Doktrin:
Alasan saya suka memiliki getter & setter adalah bahwa saya dapat menaruh semua jenis logika di dalamnya, jika saya perlu. Tapi itu hanya preferensi pribadi saya.
Saya juga harus menambahkan bahwa meskipun Propel bergerak lambat di masa lalu, sekarang Propel masih dalam pengembangan aktif lagi. Ini telah merilis beberapa versi baru dalam beberapa bulan terakhir. Versi Propel terbaru termasuk "antarmuka permintaan yang lancar" mirip dengan Doctrine , jadi Anda tidak perlu menggunakan Kriteria lagi jika Anda tidak mau.
sumber
Perlu dicatat Doctrine 2
saatinisedang dalam pengembangandirilis [ed] dan fungsinya hampir sepenuhnya berbeda dari versi stabil saat ini dari Doktrin 1. Ini bergantung pada pola Data Mapper alih-alih Rekaman Aktif, dan menggunakan 'manajer entitas' untuk menangani kegigihan. logika. Ketika dirilis akan lebih mirip dengan Hibernate Java (Doctrine 1 lebih seperti RailR 'ActiveRecord).Saya telah mengembangkan dengan rilis alpha Doctrine 2, dan harus mengatakan itu adalah kepala dan bahu di atas Doctrine 1 (hanya pendapat saya, dan saya tidak pernah menggunakan Propel). Kemungkinannya bagus bahwa komunitas Doktrin akan bergerak ke arahnya ketika dirilis.
Saya akan mendorong Anda untuk memeriksa Doctrine, tetapi jika Anda lebih suka gaya Rekaman Aktif yang digunakan Propel dan Doctrine sekarang, Anda mungkin ingin tetap menggunakan Propel.
sumber
Kedua referensi tersebut agak ketinggalan jaman sehingga Anda tetap membahas beberapa generalisasi, pada dasarnya Anda harus mengevaluasi pengalaman Anda dengan kerangka kerja tersebut, kelemahan utama dari doktrin adalah ketidakmampuan untuk memiliki IDE yang memungkinkan Anda melakukan auto-code pada propel tersebut. seorang pemenang, kurva belajar dorongan dan doktrin sangat berbeda, lebih mudah untuk mendorong, jika proyek Anda akan perlu mengelola model data yang kompleks menggunakan doktrin, jika Anda ingin bekerja cepat dengan ORM yang didokumentasikan dengan baik dan temukan lebih banyak dukungan di Propel Penggunaan internet, jauh lebih matang dan saya percaya yang paling banyak digunakan.
http://propel.posterous.com/propel-141-is-out
sumber
Saya akan menyarankan untuk menggunakan propel 1.6 yang lebih baik untuk fungsi autocomplete IDE.
sumber
Saya bukan pengguna PHP 5 non-framework ORM, tetapi berikut adalah beberapa postingan perbandingan yang bagus (jika Anda belum melihatnya):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Kedua konklusi favorit terhadap Doktrin sebagai generasi ORM baru untuk Symfony.
sumber
Setelah menggunakan keduanya selama beberapa tahun saya lebih suka Propel 2 daripada Doktrin hanya berdasarkan bagaimana Anda membangun logika kueri Anda. Doktrin adalah sedalam yang dapat diperoleh dan mengelola banyak aspeknya sesuai dengan tingkat kedalaman itu. Propel Saya merasa memiliki cara yang lebih fleksibel dan didorong objek untuk membangun dan mengelola interaksi kueri.
Bagi saya ini menyebabkan lebih sedikit kode dalam model dan lebih banyak struktur di sekitar bagaimana logika dapat / akan diproses. Ini menghasilkan hanya membangun banyak interaksi sebagai fungsi umum. (Setelah semua 90% dari apa yang akan Anda lakukan dengan database hanya akan menjadi beberapa tingkat operasi kasar.)
Pada akhirnya, keduanya kuat, dapat dikelola dan akan menyelesaikan pekerjaan. Proyek pribadi saya dan minat saya menggunakan Propel ORM 2 dan proyek masa depan, jika masih ditulis dalam PHP akan pergi rute itu.
Saya telah menggunakan keduanya setiap hari selama 3-4 tahun terakhir.
sumber
Saya sarankan menggunakan DbFinder Plugin . Ini sebenarnya adalah plugin yang sangat kuat yang mendukung keduanya, dan cukup bagus. Saya sebenarnya suka menggunakannya lebih baik daripada keduanya.
sumber
Jika saya tidak salah, kedua ORM menggunakan skema berbasis XML, dan membuat definisi skema ini cukup rumit. Jika Anda memerlukan skema sederhana berbasis PHP dengan gaya fasih. Anda dapat mencoba LazyRecord https://github.com/c9s/LazyRecord ini mendukung migrasi otomatis dan meningkatkan / menurunkan generator skrip. Dan semua file kelas dihasilkan secara statis tanpa biaya runtime.
sumber