Rozpoczynam nowy projekt z symfony, które jest łatwo zintegrowane z Doctrine i Propel , ale oczywiście muszę dokonać wyboru ... Zastanawiałem się, czy bardziej doświadczeni ludzie mają ogólne wady i / lub zalety którykolwiek z tych dwóch?
Wielkie dzięki.
EDYCJA: Dzięki za wszystkie odpowiedzi, przydatne rzeczy. Nie ma prawdziwie poprawnej odpowiedzi na to pytanie, więc zaznaczę jako zatwierdzoną tę, która otrzymała najwięcej głosów pozytywnych.
Odpowiedzi:
Poszedłbym z Doctrine. Wydaje mi się, że jest to znacznie bardziej aktywny projekt i będąc domyślnym ORMem dla symfony jest lepiej obsługiwany (nawet jeśli oficjalnie ORMy są uważane za równe).
Ponadto bardziej podoba mi się sposób, w jaki pracujesz z zapytaniami (DQL zamiast Kryteriów):
(Implementacja Doctrine jest dla mnie dużo bardziej intuicyjna).
Poza tym naprawdę wolę sposób, w jaki zarządzasz relacjami w Doctrine.
Myślę, że warto przeczytać tę stronę z dokumentacji Doctrine: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Podsumowując: gdybym zaczynał nowy projekt lub musiał wybierać między nauką Doctrine a Propel, wybrałbym Doctrine każdego dnia.
źródło
Jestem stronniczy, ponieważ pomagam trochę przy następnym wydaniu Propela, ale musisz wziąć pod uwagę, że Propel był rzeczywiście pierwszym dostępnym ORMem, a potem trochę się opóźniał, gdy powstał Doctrine, ale teraz ponownie jest aktywnie rozwijany. Symfony 1.3 / 1.4 pochodzi z Propel 1.4, gdzie większość porównań kończy się na Propel 1.3. Ponadto, następne wydanie Propela (1.5) będzie zawierało wiele ulepszeń, szczególnie w tworzeniu kryteriów (w wyniku czego będzie mniej kodu do napisania).
Lubię Propela, ponieważ wydaje się być mniej złożony niż Doctrine: większość kodu znajduje się w kilku wygenerowanych klasach, podczas gdy Doctrine podzielił funkcjonalność na wiele klas. Lubię dobrze rozumieć biblioteki, których używam (nie za dużo "magii"), ale oczywiście mam większe doświadczenie z Propelem, więc może Doctrine nie jest tak skomplikowana za kulisami. Niektórzy mówią, że Propel jest szybszy, ale powinieneś sam to sprawdzić i rozważyć, czy przeważa to nad innymi różnicami.
Może powinieneś również rozważyć dostępność wtyczek Symfony dla różnych frameworków. Uważam, że Propel ma tutaj przewagę, ale nie wiem, ile z wymienionych wtyczek jest wciąż aktualnych w najnowszej wersji Symfony.
źródło
Sprowadza się do osobistych preferencji. Używam Propela, ponieważ (między innymi) podoba mi się fakt, że wszystko ma swoją własną konkretną metodę getter & setter. W Doctrine tak nie jest.
Napędzać:
Doktryna:
Powodem, dla którego lubię mieć metody pobierające i ustawiające, jest to, że w razie potrzeby mogę umieścić w nich wszelkiego rodzaju logikę. Ale to tylko moje osobiste preferencje.
Powinienem również dodać, że chociaż Propel w przeszłości działał wolno, obecnie jest ponownie w fazie aktywnego rozwoju. W ciągu ostatnich kilku miesięcy wydał kilka nowych wersji. Najnowsza wersja Propela zawiera "płynny interfejs zapytań" podobny do Doctrine , więc nie musisz już używać Kryteriów, jeśli nie chcesz.
źródło
Należy zauważyć, że Doctrine 2 jest
obecnie w fazie rozwoju,wydany [wyd.] I funkcjonuje prawie zupełnie inaczej niż obecna stabilna wersja Doctrine 1. Opiera się na wzorcu Data Mapper zamiast Active Record i używa „menedżera encji” do obsługi trwałości logika. Po wydaniu będzie bardziej podobny do Hibernate'a Javy (Doctrine 1 jest bardziej podobny do ActiveRecord Railsów).Rozwijałem się wraz z wydaniem alfa Doctrine 2 i muszę powiedzieć, że jest o głowę i ramiona ponad Doctrine 1 (tylko moja opinia i nigdy nie korzystałem z Propela). Jest duża szansa, że społeczność Doctrine podejdzie do tego, gdy zostanie wydana.
Zachęcam cię do wypróbowania Doctrine, ale jeśli wolisz styl Active Record, którego teraz używają Propel i Doctrine, możesz po prostu pozostać przy Propel.
źródło
Te dwa odniesienia są nieco przestarzałe, więc mimo wszystko omawiasz kilka ogólników, w zasadzie musiałbyś ocenić swoje doświadczenie z frameworkiem jako takim, główną wadą doktryny jest niemożność posiadania IDE, które pozwala na automatyczne kodowanie w tym programie zwycięzca, krzywe uczenia się napędzają i doktryny są bardzo różne, łatwiej jest napędzać, jeśli twój projekt będzie musiał zarządzać złożonymi danymi, model używa doktryny, jeśli chcesz szybko pracować z ORM, który jest najlepiej udokumentowany i znaleźć więcej wsparcia w Propelu Korzystanie z internetu jest znacznie bardziej dojrzałe i uważam, że najczęściej używane.
http://propel.posterous.com/propel-141-is-out
źródło
Sugerowałbym użycie propel 1.6, który jest lepszy dla funkcji autouzupełniania IDE.
źródło
Nie jestem użytkownikiem ORM niezwiązanego z frameworkiem PHP 5, ale oto kilka dobrych postów porównawczych (na wypadek, gdybyś ich jeszcze nie widział):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Oba wnioski faworyzowane w Doctrine jako nowszej generacji ORM dla Symfony.
źródło
Po wielu latach używania obu z nich wolę Propel 2 od Doctrine w oparciu o to, jak skonstruujesz logikę zapytań. Doktryna jest tak głęboka, jak to tylko możliwe, a zarządzanie wieloma jej aspektami odpowiada temu poziomowi. Uważam, że Propel ma bardziej płynny i oparty na obiektach sposób budowania i zarządzania interakcjami zapytań.
Dla mnie doprowadziło to do zmniejszenia ilości kodu w modelu i większej liczby struktur wokół tego, jak logika może / będzie przetwarzana. Spowodowało to po prostu zbudowanie wielu interakcji jako wspólnej funkcjonalności. (W końcu 90% tego, co zrobisz z bazą danych, będzie w pewnym stopniu operacją prostą).
Ostatecznie oba są potężne, łatwe w zarządzaniu i wykonają zadanie. Moje osobiste projekty i zainteresowania wykorzystują Propel ORM 2 i przyszłe projekty, jeśli nadal będą napisane w PHP, pójdą tą drogą.
Używam obu na co dzień od 3-4 lat.
źródło
Sugerowałbym użycie wtyczki DbFinder . W rzeczywistości jest to bardzo potężna wtyczka, która obsługuje oba i jest całkiem niezła. Właściwie lubię go używać lepiej niż oba.
źródło
Jeśli się nie mylę, oba ORMy używają schematu opartego na XML, a tworzenie tych definicji schematu jest dość uciążliwe. Jeśli potrzebujesz prostego schematu opartego na PHP z płynnym stylem. Możesz wypróbować LazyRecord https://github.com/c9s/LazyRecord obsługuje automatyczną migrację i generatory skryptów aktualizacji / obniżenia. Wszystkie pliki klas są generowane statycznie bez kosztów wykonania.
źródło