PHP ORMS'nin: uskur vs Doktrini

8 Cevap php

Ben .... ben kolayca Doctrine ve Propel ile entegre symfony ile yeni bir proje başlıyorum, ama ben tabii ki bir seçim yapmak gerekir Orada daha deneyimli insanlar bu ikisinden birinin ile gidiş için genel artılarını ve / veya eksileri varsa merak ediyorum?

Çok teşekkürler.

EDIT: Thanks for the all the responses, useful stuff. There's no truly correct answer to this question so I'll just mark as approved the one that got the most popular up-votes.

8 Cevap

Doktrin ile gitmek istiyorum. Bu çok daha etkin bir proje olup symfony için varsayılan ORM olmanın o (resmen Orms eşit kabul edilir olsa bile) desteklenen daha iyi gibi geliyor bana.

Ayrıca ben daha iyi sorguları (yerine Kriterleri DQL) ile çalışacak bir yol gibi:

<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);

// Doctrine
$items = Doctrine_Query::create()
       ->from('Example e')
       ->leftJoin('e.Foobar')
       ->where('e.id = ?', 20)
       ->execute();
?>

(Doktrini adlı uygulama çok daha sezgisel benim için).

Ayrıca, ben gerçekten Doktrini ilişkileri yönetmek yolu tercih.

http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained: Ben Doktrin belgelerine Bu sayfayı bir okuma değer olduğunu düşünüyorum

Özetle: Ben yeni bir proje başlangıç ​​veya Doktrini ve Propel öğrenme arasında seçim yapmak zorunda olsaydı ben herhangi bir gün Doktrini için gitmek istiyorum.

Ben uskur sonraki sürümü üzerinde biraz yardımcı beri Ben, önyargılı değilim, ama uskur Doktrin oluşturulan aldığımda biraz gecikmeli sonra, gerçekten mevcut ilk ORM oldu, ama şimdi tekrar aktif bir gelişme olduğunu düşünmek gerekir. Symfony 1.3/1.4 en karşılaştırmaları uskur 1.3 durdurmak uskur 1.4 ile birlikte geliyor. Ayrıca, uskur bir sonraki sürümü (1.5) özellikle (yazmak için daha az kod ile sonuçlanan) Eğer Kriterleri oluşturulmasında, bir sürü iyileştirme içerecektir.

Doktrin sınıfların sürü özelliğe bölmek, oysa çoğu kod birkaç oluşturulan sınıfları: bu Doktrini daha az karmaşık gibi görünüyor çünkü ben Propel seviyorum. Ben (çok fazla değil "sihirli") kullanıyorum kütüphanelerin iyi bir anlayış var gibi, ama tabii, ben uskur ile daha fazla deneyime sahip, bu yüzden belki Doktrin böylece perde arkasında karmaşık değildir. Bazı Propel daha hızlı olduğunu söylüyorlar, ama kendiniz için bu kontrol ve bu ağır basar diğer farklılıklar olmadığını düşünmelisiniz.

Belki de farklı çerçeveler için Symfony eklentileri kullanılabilirliğini düşünmelisiniz. Ben Propel burada bir avantajı olduğuna inanıyorum, ama ben kaç listelenen eklentileri Symfony son sürümü ile yine up-to-date bilmiyorum.

Bu Doctrine 2 olup currently in development released [ed] ve Doktrin 1 mevcut kararlı sürüme neredeyse tamamen farklı fonksiyonlar. It dayanır unutulmamalıdır yerine Active Record Veri Mapper desen, ve sebat mantığı işlemek için bir 'varlık yöneticisi' kullanır. Serbest zaman Java'nın Hibernate (Doktrini 1 daha Rails'in ActiveRecord gibi) yakın bir benzerlik taşıyacak.

Doktrin 2 alfa sürümü ile gelişmekte oldum ve bu Doktrini 1 başları yukarıda ve omuzlar (sadece benim düşüncem ve ben Propel asla kullanmadım) söylemeliyim. Şansı serbest bırakıldığında Doktrini topluluk ona doğru hareket edeceğini iyi.

Ben Doktrini kontrol etmenizi tavsiye ederim, ama uskur ve Doktrin şimdi kullandığımız Active Record tarzı tercih ederseniz, sadece uskur ile sopa isteyebilirsiniz.

It comes down to personal preference. I use Propel because (among other things) I like the fact that everything has its own concrete getter & setter method. In Doctrine, this is not the case.

Uskur:

$person->setName('Derek');
echo $person->getName();

Doktrini:

$person->name = 'Derek';
echo $person->name;

Ben alıcılar ve sahip Seviyorum nedeni belirleyiciler Ben gerekirse ben, onları mantık her türlü koymak olabilir. Ama bu sadece benim kişisel tercihi.

Ben de Propel geçmişte yavaş hareket olmasına rağmen, yine etkin geliştirme altında şimdi olduğunu eklemek gerekir. Bu son birkaç ay içinde birçok yeni sürümleri yayımladı. Uskur en son sürümü a "fluent query interface" similar to Doctrine's içerir, bu yüzden size istemiyorsanız artık Kriterleri kullanmak zorunda değilsiniz.

Eğer yine de temelde çerçeve ile deneyiminizi değerlendirmek olurdu, bazı genellemeler kapsayacak böylece iki referanslar biraz modası geçmiş olan gibi, doktrinde önemli bir dezavantajı propel size otomatik kodunu sağlayan bir IDE var yetersizliğidir olduğunu proje en iyi belgelenmiş bir ORM ile hızlı çalışır ve uskur daha fazla destek bulmak istiyorsanız karmaşık veri modeli, doktrin kullanır yönetmek gerekir eğer bir kazanan, eğriler itmek ve doktrin çok farklı öğrenme, o, itmek için daha kolaydır İnternet kullanır, çok daha olgun ve ben en çok kullanılan inanıyorum.

http://propel.posterous.com/propel-141-is-out

PHP 5 non-çerçeve ORM bir kullanıcı değilim, ama burada (henüz onları görmedim durumunda), bazı iyi bir karşılaştırma mesajlar bulunuyor:

http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/

http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine

Symfony için ORM yeni bir nesil olarak Doktrini doğru her iki Conlusion favori.

I DbFinder Plugin kullanarak öneririm. Bu aslında hem destekleyen çok güçlü bir eklenti olduğunu ve oldukça güzel bir güçlüdür. Aslında ya da bunu çok iyi kullanıyor gibi.

Ben netbeans otomatik tamamlama için iyidir 1,6 itmek kullanmayı öneririm.