Chciałbym usłyszeć od tych, którzy używali Doctrine 2 (lub nowszej wersji) i Propel 1.5 (lub nowszej wersji). Większość porównań między tymi dwoma mapującymi relacyjnymi obiektami opartymi jest na starych wersjach - Doctrine 1 vs. Propel 1.3 / 1.4, i obie ORM przeszły znaczące przeprojektowania w swoich ostatnich wersjach. Na przykład większość krytyki Propela wydaje się koncentrować wokół klas „ModelName Peer ”, które w każdym razie są przestarzałe w wersji 1.5.
Oto, co zgromadziłem do tej pory (I starałem się, aby ta lista była jak najbardziej zrównoważona ...):
- Napędzać
- Plusy
- Niezwykle przyjazny dla IDE, ponieważ generowany jest rzeczywisty kod, zamiast polegać na magicznych metodach PHP. Oznacza to, że funkcje IDE, takie jak uzupełnianie kodu, są w rzeczywistości pomocne.
- Szybko (pod względem użycia bazy danych - w bazie danych nie jest wykonywana introspekcja)
- Czysta migracja między wersjami schematów (przynajmniej w wersji beta 1.6)
- Może generować modele PHP 5.3 (tj. Przestrzenie nazw)
- Łatwo połączyć wiele rzeczy w jedno zapytanie do bazy danych za pomocą
useXxx
metod takich jak metody. (Zobacz film „Uzupełnianie kodu” powyżej)
- Cons
- Wymaga dodatkowego kroku kompilacji, a mianowicie zbudowania klas modeli.
- Wygenerowany kod wymaga przebudowy przy każdej zmianie wersji Propela, zmianie ustawienia lub zmianie schematu.
Może to być nieintuicyjne w przypadku niektórych i metody niestandardowe zastosowane w modelu zostaną utracone. (Myślę?)- Nieprawda; metody niestandardowe nie są tracone, ponieważ wygenerowana klasa jest klasą podstawową; Propel zapewnia klasę encji specjalnie dla rozszerzenia. - Niektóre przydatne funkcje (np. Zachowanie wersji, migracje schematów) mają status wersji beta.
- Plusy
- Doktryna
- Plusy
- Bardziej popularny
- Doctrine Query Language może wyrażać potencjalnie bardziej skomplikowane relacje między danymi, niż jest to łatwo możliwe dzięki strategii ActiveRecord firmy Propel.
- Łatwiej jest dodać zachowania wielokrotnego użytku w porównaniu z Propelem.
- Komentarze oparte na DocBlock do budowania schematu są osadzone w rzeczywistym PHP zamiast w osobnym pliku XML.
- Korzysta z przestrzeni nazw PHP 5.3 wszędzie
- Cons
- Wymaga nauki całkowicie nowego języka programowania (Doctrine Query Language)
- Wdrożono je w kilku „magicznych metodach”, dzięki czemu autouzupełnianie IDE jest bezwartościowe.
- Wymaga introspekcji bazy danych, dlatego domyślnie jest nieco wolniejsza niż Propel; buforowanie może to usunąć, ale buforowanie powoduje znaczną złożoność.
- Mniej zachowań jest zawartych w podstawowej bazie kodu. Kilka funkcji oferowanych przez Propela (takich jak Zestaw zagnieżdżony) jest dostępnych tylko poprzez rozszerzenia.
- Zajebiście OGROMNY :)
- Plusy
Zebrałem to jednak tylko poprzez lekturę dokumentacji dostępnej dla obu narzędzi - właściwie nie zbudowałem jeszcze niczego.
Chciałbym usłyszeć od tych, którzy używali obu narzędzi, aby podzielić się swoimi doświadczeniami na temat zalet / wad każdej biblioteki i jakie są ich rekomendacje w tym momencie :)