Doctrine 2 mi yoksa Propel 1.5 / 1.6 mı seçmeliyim ve neden? [kapalı]


30

Doctrine 2 (veya üstü) ve Propel 1.5 (veya üstü) kullananlardan duymak istiyorum. Bu iki nesne ilişkisel haritacısı arasındaki karşılaştırmaların çoğu eski sürümlere dayanıyor - Doktrin 1 - Propel 1.3 / 1.4 ve her iki ORM de son revizyonlarında önemli yeniden tasarımlardan geçti. Örneğin, Propel eleştirisinin çoğu, her durumda 1.5'te itiraz edilen "ModelName Peer " sınıfları etrafında toplanmış görünüyor .

İşte şimdiye kadar biriktirdiklerim (Bu listeyi olabildiğince dengeli hale getirmeye çalıştım ...):

  • uskur
    • Artıları
      • Son derece IDE dostu, çünkü PHP sihirli yöntemlerine güvenmek yerine gerçek kod üretildi. Bu, kod tamamlama gibi IDE özelliklerinin aslında yardımcı olduğu anlamına gelir .
      • Hızlı (Veritabanı kullanımı açısından - veritabanında çalışma zamanı incelemesi yapılmaz)
      • Şema sürümleri arasında temiz geçiş (en azından 1.6 beta'da)
      • PHP 5.3 modelleri üretebilir (yani ad alanları)
      • Tek bir veritabanı sorgusu içinde birçok şeyi zincirleme useXxxyöntemlerle kolaylaştırmak kolaydır . (Yukarıdaki "kod tamamlama" videosuna bakın)
    • Eksileri
      • Model sınıflarını inşa etmek için ekstra bir yapım adımı gerektirir.
      • Propel sürümü ne zaman değiştirilirse, bir ayar değiştirildiğinde veya şema değiştiğinde oluşturulan kodun yeniden oluşturulması gerekir. Bu, bazılarına karşı sezgisel olmayabilir ve modele uygulanan özel yöntemler kaybolur. (Bence?) - Doğru değil; Oluşturulan sınıf bir temel sınıf olduğu için özel yöntemler kaybolmaz; Propel, özellikle uzatma için bir varlık sınıfı sağlar.
      • Bazı yararlı özellikler (örneğin sürüm davranışı, şema geçişleri) beta durumundadır.
  • doktrin
    • Artıları
      • Daha popüler
      • Doktrin Sorgu Dili, Propel'in ActiveRecord stratejisi ile veriler arasında olası olandan daha karmaşık ilişkileri ifade edebilir.
      • Propel ile karşılaştırıldığında tekrar kullanılabilir davranışlar eklemek daha kolaydır.
      • Şema oluşturmak için DocBlock tabanlı yorum, ayrı bir XML dosyası yerine gerçek PHP'ye gömülüdür.
      • Her yerde PHP 5.3 Ad Alanları kullanır
    • Eksileri
      • Tamamen yeni bir programlama dili öğrenmeyi gerektirir (Doctrine Query Language)
      • IDE'yi otomatik olarak tamamlayarak değersiz kılan birçok yerde "sihirli yöntemler" olarak uygulanmıştır.
      • Veri tabanı incelemesi gerektirir ve bu nedenle varsayılan olarak Propel'den biraz daha yavaştır; önbellekleme bunu kaldırabilir, ancak önbellekleme oldukça karmaşıklık sağlar.
      • Çekirdek kod tabanında daha az davranış vardır. Propel'in kutudan sağladığı çeşitli özellikler (Yuvalanmış Set gibi) yalnızca uzantılar aracılığıyla kullanılabilir.
      • Freakin 'BÜYÜK :)

Bu, ancak her iki araç için mevcut olan belgeleri okuyarak bile yalvardım - Aslında henüz bir şey yapmadım.

Her iki aracı da kullananlardan duymak, her kütüphanenin artıları / eksileri konusundaki deneyimlerini paylaşmak ve tavsiyelerinin bu noktada ne olduğunu bilmek istiyorum :)


Doktrinin hangi versiyonundan bahsediyorsun? v2 ve v1.2 ayrı kutuplardır.
Orbling

1
@Orbling: Sorunun başlığını veya gövdesini okudun mu? Onları tekrar oku :)
Billy ONeal

@ Billy ONeal: İyi nokta. Doktrin2'nin davranışları Çekirdekten tamamen kaldırılmıştır, bu yüzden v1.2 hakkında konuşmuş olabileceğinizi düşündüm.
Orbling

@Orbling: Ah, bu mantıklı. Öte yandan “davranışlara” eşdeğer sağlar - sadece onlara öyle demiyor.
Billy ONeal

@Billy ONeal: Gerçekten de değil, onları oldukça kolay bir şekilde kendiniz uygulayabilirsiniz veya üçüncü taraf eklentileri edinebilirsiniz. Ancak Doktrin1 veya Propel gibi değil.
Orbling

Yanıtlar:


15

Doktrini önerme eğilimine rağmen, başka bir şey söylemem gerekiyor. Ayrıca kişisel tercihlerimin kişisel deneyimlerime yönelik olduğunu, ancak @Dan'ın ikisinin de çok güçlü olduğunu söylediğini unutmayın.

Daha önce belirttiğiniz birkaç nedenden ötürü Doctrine'den hoşlanmıyorum, büyüklük ve tüm sihirli yöntemler gibi benimle olan anlaşmalar . Öyleyse Propel kullanıyorum , neden? temel olarak basitliği ve yazılım geliştirmede basit olması nedeniyle iyidir . Benim kişisel inancım tasarımlarla açgözlülük almanın kötü olduğu.

Propel'i kullanarak, kendi sistemlerim için bir depo modeli uygulaması gerçekleştirmeyi başardım ve bu, gördüğüm en hızlı ORM'lerden biri olan Propel'in performansından bahsetmeden, gerçekten iyi çalışıyor.

Bu yüzden benim temel cevabım Propel , çünkü daha az kodlu iyi bir yazılım elde ediyor ve IDE'ye veri tabanına bağlanan ve iyi bir şekilde çalışan ORM yazılımı noktasını kaybetmeden iyi bir akıllılık sunmasını sağlıyor ...

Umarım yardım edebilirim


Bir yıl boyunca Doctrine kullanıyordum. Kohana, Laravel Eloquent'i denedim, ortak alanlarını seviyorum çünkü alıcılardan ve ayarlayıcılardan gerçekten nefret ediyorum (mülk erişimcisini tercih ederim: P). Propel'de 'IDE friendly' kelimesini gördükten sonra, bu akşam Propel'i denemeye karar verdim.
Zorji

11

Doktrin 2 hakkındaki bilgileriniz yanlış ...

  • DQL hemen hemen SQL, yani öğrenilecek bir şey yok.
  • Doktrin 2, herhangi bir 'sihir' kullanmaz (yalnızca herhangi bir güncel PHP kütüphanesinde beklediğiniz gibi).
  • Doctrine 2 aktif olarak veritabanı incelemesi yapmaz ... haritalama, varlıklarınız / haritalama dosyalarınızda saklanır ve veritabanınızın buna uygun olduğunu varsayar.
  • Önbellekleme pek 'büyük karmaşıklık' değildir.
  • Doktrin 2'nin kullanıma hazır 'davranışları' yok

Propel'i daha önce kullanmadım, ancak Doctrine 2 çok daha yeni ve gerçekten yüksek kaliteli bir kod temeli var. Fakat Propel Aktif Kayıt kullanıyor gibi gözüküyorsa, Doctrine 2 Veri Eşleyici desenini kullanıyor.

Doktrin 2'nin yeni olmasının dezavantajı, üçüncü taraf örneklerinin olmayışı, ancak hızla artıyor.

Doktrin 2'yi tavsiye ederim ...


Propel'i daha önce kullanmadıysanız, FUD olduğu için bunu reddetmekten başka çarem yok. "Magic" yorumuna gelince, demek istediğim, gerçek yöntemler yerine __getve __set(gerçek olan) PHP sihirli yöntemlerine dayanıyor olmasıdır .
Billy ONeal

1
Aşağı oy için Tamam ... Ama Doktrin 2 sihirli yöntemleri nerede kullanır? DocumentRepository'nin find * yöntemlerini (__call) bir yana, bu sorun değil, çünkü bu sadece daha güzel bir sorgulama yöntemi ... IDE otomatik tamamlama özelliğini daima kaybedeceksiniz. ActiveRecord istiyorsanız Propel kullanın. Veri Eşleyici'yi kullanmak istiyorsanız, Doctrine 2'yi kullanın.
Cobby

2
Propel, kod oluşturma sayesinde çalışma zamanında veritabanını ele almaz.
William Durand

Madde işareti 1, tamamen doğru değil, DQL, SQL gibi "hemen hemen" değil. DQL, Doktrin'in farkında olması gereken model nesnelere referansta olduğunuz gerçeğine ve daha karmaşık birleşme gerekirse, bazı komplikasyonlara sahip olmanıza bağlıdır.
Mike Purcell

2
DQL, SQL'in bir lehçesidir, nasıl SQL gibi "hemen hemen" olamaz? Evet, dilin semantiği biraz farklı (nesneler ve tablolar), ama sonuçta DQL, yapısal tabloları sorgulamak için kullanılan bir dildir - ki bu sadece tablo olarak değil nesne olarak gösteriliyordu - aka SQL.
Cobby

3

Yorumlarınızdan, eski bir uygulamada bir ORM ihtiyacınızı yerine koymak veya yerine getirmek için Propel veya Doctrine seçmeye çalışıyorsunuz.

Söylendiği gibi, ikisinden birine geçmenin başvurunuzda büyük bir gelişme olabileceği gerçeğini gözden kaçırmamak önemlidir. Yani, yanlış bir cevap yok.

Bu nedenle, seçtiğiniz çözüm büyük ölçüde, aşağıdaki soruların yanıtlarını temel alan tercihlerinize bağlıdır:

  1. Hangisi mevcut çözümünüze en iyi şekilde entegre olur?
  2. Hangi API'yi tercih edersiniz?
  3. Hangisine katkıda bulunmayı tercih edersiniz? (yamalar, belgeler, hata raporları, vb ...)

Şahsen ben topluluk, dokümantasyon ve mimarlık nedeniyle Doktrin 2'yi tavsiye ederim .


1
Ben burada aralarında bir karşılaştırma arıyorum. (Hangisi maddeye katkıda bulunmak isterim? Hiçbirine katkıda bulunmak istemiyorum - kütüphaneyi kullanmak istiyorum, yazmak istemiyorum!;)). Doctrine 2'nin iyi bir topluma, belgelere ve mimariye sahip olduğunu söylüyorsunuz - mimari açıdan evet, DataMapper. Dokümanlar akıllıca Kabul ettiğimden emin değilim - iki projenin de dokümanlar iyi görünüyor. Her iki sistemi de kullanan bir topluluk görmedim. Bu şeylerle ne demek istediğinizi açıklamak ister misiniz?
Billy ONeal

2
Ah, Doktrin doktorunu beğendin mi? Propel'i okudun mu? Ve evet, Doktrin topluluğu hoş ama ODM deposuna bir göz atın, pek çok halkla ilişkiler yorumu bile yorumlanmadı, birleştirilmedi ya da reddedildi… Propel zaman çizelgesine bakın, topluluk gerçekten aktif;)
William Durand

3

Propel'i öneriyorum çünkü iyi entegre, hızlı ve güçlü. Kod üretmek, çalışma zamanına sınıfları yüklemekten daha iyidir, hata ayıklama adımlarını kolaylaştırır ve size ne yarattığınızı gösterir. Öyleyse, oluşturma adımı sorun değil.

Doktrin2'nin resmi bir davranışı yoktur ve DataMapper tasarım deseni serindir ancak gerçek hayatta kullanılması zordur. Oh ve DQL bir acıdır, ama öğrenmesi gereken bir dildir ...

Nesnelerle (DQL / SQL / ne olursa olsun) düşünmek istiyorsanız, Propel'i seçin.

Doktrin2, Symfony2 de facto'nun bir parçasıdır ancak işler çok yakında hareket edecek, son Fabien Potencier makalesine bakınız.

Şerefe, William


Propel ile 2 yıl önce symfony1 ile başladım. Ardından symfony2 için Doctrine2'ye geçmek zorunda kaldım. Propel.Cheers'a döndüğüm için mutluyum!
Bhanu Krishnan

2

İkisi de çok iyi. Birinin bir şey yapabileceği veya diğerinden daha iyi bir şey yapabileceği bazı uç durumlar vardır. Her ikisinde de sorun yaşadığım her yerde, bilgi eksikliği benim yapamadıklarımdan daha fazla oldu.

Bu, belgelerin ve desteğin, kodun kendinden gelen becerisinden daha önemli olduğu anlamına gelir. Sorun yaşadığınızda size yardım edebilecek birini tanıyor musunuz? Belgeleri ne kadar iyi alıyorsunuz? Onlardan biri senin için daha doğal hissediyor mu?


2

Eski bir mysql uygulaması (200 tablo ya da öylesine) için Propel 1.63'ü seçtim - buradaki faktörler: yeni geliştiricilerin kod tamamlama ile kolayca yollarını bulmalarını sağlayan IDE desteği; çapraz veritabanı şeması desteği, performans; numaralandırmalar ve çeşitli davranışların kullanımı için daha iyi yerel destek. Aslında, bu Symfony2 tarafından en iyi şekilde desteklendiği için Doctrine ile başladım, ancak bir kez Propel Symfony ile olan desteğini büyük ölçüde geliştirdi (sonunda taşıyacağım bir sonraki platform) Yukarıdaki sorunların daha iyi ele alınmasından dolayı değiştim. Hiç pişmanlık yok Propel kesin bir kazanan.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.