2011-02-02 20 views

Odpowiedz

25

(7-mar-2013) Uwaga: Ta odpowiedź jest chyba teraz nieco nieaktualne. Nie nadążam za społecznością PHP w tej chwili i to porównanie jest pomiędzy Doctrine ORM v2 i Zend Framework v1. To porównanie jabłek z pomarańczami, ponieważ są to dwie różne rzeczy.


Out-of-the-box Zend_Db jest bardziej sprawiedliwy udoskonalona Database Abstraction Warstwy na górze, gdzie jako ChNP Doctrine 2 jest obiektem relacyjnego Mapper (który siedzi na górze to własny DBAL).

Doctrine 2 jest znacznie lepsza w przypadku bardziej skomplikowanych warstw domeny, ponieważ cała logika biznesowa, logika trwałości itp. Są rozdzielone na wiele klas, więc nie obsługują wielu ról. Ponadto, ponieważ masz więcej zajęć - które są czystsze i luźno powiązane - to testowanie ich znacznie łatwiejsze.

Co więcej, będziesz pisać tylko część SQL, z której korzystasz Zend_Db, ponieważ możesz manipulować obiektami encji, a Doctrine tłumaczy te zmiany na bazę danych. Wygenerowany SQL korzysta również z transakcji, które zapewniają przyzwoity wzrost wydajności!

Zalecam zapoznanie się z Designem opartym na domenach, aby lepiej zrozumieć, dlaczego Doctrine 2 jest tak niesamowita.

Nie zrozumcie mnie źle, choć można zrobić DDD z Zend_Db ale to naprawdę nie istnieje OOTB (bo to nie jest ORM), i nie będzie już tak silne i pełni funkcjonalny jak Doktryny 2.

+1

Uzgodnione. Zend_Db to bałagan dla każdego średniego lub dużego projektu. Podczas gdy w Doctrine masz jedno repozytorium dla każdej encji, z Zend_Db skończysz rozszerzanie Zend_Db_Table, które używa wzorca Table Data Gateway i włączając metody takie jak getAllAllowedUsers() z cłem SQL łączącym kilka tabel i kończącym Zend_Db_Table_Row, który faktycznie nie robi ' t nie ma nic wspólnego z rzeczywistym modelem biznesowym. Łączymy więc Zend_Db_Table ze wzorcem repozytorium. Być może zdajesz sobie sprawę, że faktycznie potrzebujesz programu do mapowania danych, więc zaczynasz tworzyć własną implementację, wymyślając nowe koło. –

+0

A nawet najgorsze: niektórzy programiści tworzą selekcje na kontrolerze. 'listAction() {' $ UsersTable-> select() '...' –

+0

Wiem, że jest to stare pytanie, ale w ciągu 2 lat doktryny 2 + Zend Framework doświadczenie nie polecam bezwzględnie stosowania doktryny 2 JEST WOLNO bardzo WOLNO, nie jest dobre dla aplikacji internetowych, ma świetną abstrakcję, ale ma także duże wady. – albanx

0

Jeśli masz mały wich projekt jest zobowiązany do korzystania z konkretnego DBMS, nie trzeba ORM i doktryny.

Jeśli masz wich projekt jest duży iw przyszłości może zaistnieć potrzeba adapterów, aby przełączyć się z jednego DBMS do innego, niż można rozważyć użycie Nauki

Jak można przeczytać w opisie nauką

Doctrine 2 to obiektowo-relacyjny obiekt odwzorowujący obiekt ( ) dla PHP 5.3.0+, który zapewnia przezroczystą trwałość dla obiektów PHP w postaci . Znajduje się na silnej abstrakcyjnej bazie danych warstwy (DBAL). Object-Relational Mappers zadaniem podstawowym jest przezroczyste tłumaczenie między obiektami (PHP) i relacyjnych baz danych.

+1

proszę zdefiniować "duży" :-) Dziękuję – opHASnoNAME

+1

Twoja odpowiedź oznacza, że ​​podstawową zaletą ORM jest przenośność DBMS. Ale zwykły PDO - lub naprawdę dowolny DBAL - zapewnia to.Uważam, że prawdziwą korzyścią ORM jest czyste rozróżnienie między samymi modelami a ich trwałością/nawodnieniem do/z repozytorium. –

0

Zend_DB i Doctrine używają różnych sposobów. Zend_DB działa jak brama danych tabeli i brama danych wiersza. Doctrine jest programem odwzorowującym obiekty.

W moich doświadczeniach Zend_DB wystarczy i szybko dla większości typowych zadań. Doktryna działa wolno i zużywa więcej pamięci niż Zend_DB.

+0

Z mojego doświadczenia wynika, że ​​trudniej jest zachować kod, który nie ma czystej separacji między logiką biznesową a warstwą dostępu do danych. Zwykle korzystasz z wzorców Active Record, gdy masz do czynienia z modelem. Na przykład rozszerzenie Zend_Db_Table_Row i Zend_Db_Table lub nawet tworzenie własnych maperów danych i repozytoriów (wzór repozytorium). Zdecydowanie uważam, że jest to małe projekty i zespoły. –