Haruskah saya memilih Doctrine 2 atau Propel 1.5 / 1.6, dan mengapa? [Tutup]

30

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 useXxxmetode. (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.
  • 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 :)

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 :)

Billy ONeal
sumber
Versi Doktrin apa yang Anda bicarakan? v2 dan v1.2 terpisah kutub.
Orbling
1
@Orbling: Apakah Anda membaca judul atau isi pertanyaan? Baca lagi :)
Billy ONeal
@ Billy ONeal: Poin bagus. Doctrine2 memiliki perilaku yang dihapus hampir seluruhnya dari Core, jadi saya pikir Anda mungkin telah berbicara tentang v1.2.
Orbling
@Orbling: Ah, itu masuk akal. Di sisi lain, ia menyediakan ekuivalen dengan "perilaku" - ia tidak menyebut mereka seperti itu.
Billy ONeal
@Billy ONeal: Tidak juga, Anda bisa menerapkannya sendiri dengan cara yang cukup mudah, atau Anda bisa mendapatkan plugin pihak ketiga. Tetapi tidak seperti Doctrine1 atau Propel.
Orbling

Jawaban:

15

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

David Conde
sumber
Saya menggunakan Doktrin selama setahun. Saya mencoba Kohana, Laravel Eloquent, saya suka bidang publik mereka karena saya sangat membenci getter dan setter (saya lebih suka accessor properti: P). Setelah saya melihat kata 'IDE friendly' di Propel, saya memutuskan untuk mencoba Propel malam ini.
Zorji
11

Informasi Anda tentang Doctrine 2 salah ...

  • DQL cukup banyak SQL, jadi tidak banyak yang bisa dipelajari.
  • Doctrine 2 tidak menggunakan 'sihir' (hanya apa yang Anda harapkan di perpustakaan PHP terkini).
  • Doctrine 2 tidak secara aktif melakukan introspeksi basis data ... pemetaan disimpan dalam entitas Anda / file pemetaan dan mengasumsikan database Anda akan sesuai dengan itu.
  • Caching hampir tidak 'rumit'.
  • Doctrine 2 tidak memiliki 'perilaku' di luar kebiasaan

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 ...

Pendek
sumber
Jika Anda belum pernah menggunakan Propel sebelumnya, maka saya tidak punya pilihan selain membatalkannya karena FUD. Adapun komentar "Magic", yang saya maksud adalah bahwa itu didasarkan pada metode ajaib PHP seperti __getdan __set(yang benar) daripada metode nyata.
Billy ONeal
1
Ok untuk suara turun ... Tapi di mana Doctrine 2 menggunakan metode sihir? Selain metode find * DocumentRepository (__call), tapi itu bukan masalah karena itu hanya cara yang lebih baik untuk query ... Anda akan selalu kehilangan pelengkapan otomatis IDE. Jika Anda ingin ActiveRecord gunakan Propel. Jika Anda menginginkan Data Mapper, gunakan Doctrine 2.
Cobby
2
Propel tidak mengintrospeksi database saat runtime berkat pembuatan kode.
William Durand
Butir butir # 1 tidak sepenuhnya benar, DQL tidak "cukup banyak" seperti SQL. DQL bergantung pada fakta bahwa Anda mereferensikan objek model yang harus diperhatikan oleh Doktrin, dan ada beberapa komplikasi jika diperlukan penggabungan yang lebih kompleks.
Mike Purcell
2
DQL adalah dialek SQL, bagaimana itu tidak membuatnya "cukup banyak" seperti SQL? Ya, semantik bahasa sedikit berbeda (objek vs tabel), tetapi pada akhirnya DQL adalah bahasa untuk kueri data terstruktur - yang kebetulan direpresentasikan sebagai objek bukan tabel - alias SQL.
Cobby
3

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:

  1. Mana yang terbaik diintegrasikan ke dalam solusi Anda saat ini?
  2. API mana yang Anda sukai?
  3. Yang mana yang ingin Anda sumbangkan? (tambalan, dokumentasi, laporan bug, dll ...)

Secara pribadi, saya akan merekomendasikan Doktrin 2 karena komunitas, dokumentasi, dan arsitekturnya.

Christopher Manning
sumber
1
Saya mencari perbandingan di antara mereka di sini. (Mengapa yang mana saya lebih suka berkontribusi untuk masalah? Saya tidak ingin berkontribusi untuk mereka - saya ingin menggunakan perpustakaan, bukan menulisnya!;)). Anda mengatakan Doctrine 2 memiliki komunitas, dokumen, dan arsitektur yang baik - arsitektur-bijaksana, ya, itu DataMapper. Docs bijaksana saya tidak yakin saya setuju - kedua proyek tampaknya memiliki dokumen yang bagus. Saya belum melihat banyak komunitas menggunakan kedua sistem. Maukah Anda menguraikan apa yang Anda maksudkan dengan hal-hal ini?
Billy ONeal
2
Oh Anda suka dokumen Doctrine? Apakah Anda membaca Propel? Dan ya komunitas Doktrin itu baik tetapi lihatlah repositori ODM, banyak PR bahkan tidak berkomentar atau bergabung atau ditolak ... Lihatlah timeline Propel, komunitas ini benar-benar aktif;)
William Durand
3

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

William Durand
sumber
, saya mulai dengan Propel 2 tahun lalu dengan symfony1. lalu harus beralih ke Doctrine2 untuk symfony2. Senang kembali ke Propel.Cheers!
Bhanu Krishnan
2

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?

Dan Blows
sumber
2

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.

Michael Heward
sumber