Doctrine 2 (이상) 및 Propel 1.5 (이상)를 사용한 사람들의 의견을 듣고 싶습니다. 이 두 객체 관계형 매퍼 간의 대부분의 비교는 이전 버전 인 Doctrine 1과 Propel 1.3 / 1.4를 기반으로하며, 두 ORM 모두 최근 개정에서 상당한 재 설계를 거쳤습니다. 예를 들어, Propel에 대한 대부분의 비판은 "ModelName Peer "클래스 를 중심으로하는 것으로 보이며 ,이 클래스는 1.5에서 더 이상 사용되지 않습니다.
여기까지 내가 지금까지 축적 한 것이 있습니다 (그리고 나는이 목록을 가능한 한 균형있게 만들려고 노력했습니다 ...) :
- 추진
- 찬성
- PHP 매직 메소드에 의존하지 않고 실제 코드가 생성되므로 IDE에 매우 친숙합니다. 이것은 코드 완성 과 같은 IDE 기능 이 실제로 유용 하다는 것을 의미 합니다.
- 빠름 (데이터베이스 사용 측면에서-데이터베이스에서 런타임 검사가 수행되지 않음)
- 스키마 버전 간 클린 마이그레이션 (최소 1.6 베타 버전)
- PHP 5.3 모델 (예 : 네임 스페이스)을 생성 할 수 있습니다
useXxx
메소드 와 같은 것을 사용하여 많은 것을 단일 데이터베이스 쿼리로 쉽게 연결할 수 있습니다. (위의 "코드 완성"비디오 참조)
- 단점
- 추가 빌드 단계, 즉 모델 클래스 빌드가 필요합니다.
- Propel 버전이 변경되거나 설정이 변경되거나 스키마가 변경 될 때마다 생성 된 코드를 다시 작성해야합니다.
이것은 직관적이지 않을 수 있으며 모델에 적용된 사용자 정의 방법이 손실됩니다. (생각합니까?)-사실이 아닙니다. 생성 된 클래스가 기본 클래스이기 때문에 사용자 정의 메소드가 손실되지 않습니다. Propel은 확장을 위해 특별히 엔티티 클래스를 제공합니다. - 유용한 기능 (예 : 버전 동작, 스키마 마이그레이션)은 베타 상태입니다.
- 찬성
- 교의
- 찬성
- 인기가 더 많은
- Doctrine Query Language는 Propel의 ActiveRecord 전략으로 가능한 것보다 데이터 간의 복잡한 관계를 표현할 수 있습니다.
- Propel과 비교할 때 재사용 가능한 동작을 쉽게 추가 할 수 있습니다.
- 스키마를 빌드하기위한 DocBlock 기반 주석은 별도의 XML 파일 대신 실제 PHP에 포함됩니다.
- 어디서나 PHP 5.3 네임 스페이스 사용
- 단점
- 완전히 새로운 프로그래밍 언어를 학습해야 함 (교리 쿼리 언어)
- 여러 위치에서 "마법 방법"이라는 측면에서 구현되어 IDE 자동 완성 기능을 무가치하게 만듭니다.
- 데이터베이스 검사가 필요하므로 기본적으로 Propel보다 약간 느립니다. 캐싱은이를 제거 할 수 있지만 캐싱은 상당히 복잡합니다.
- 핵심 코드베이스에는 동작이 더 적습니다. Propel에서 제공하는 여러 기능 (예 : Nested Set)은 확장을 통해서만 사용할 수 있습니다.
- Freakin 'HUGE :)
- 찬성
나는 두 도구 모두에 대한 문서를 읽음으로써 만 수집했지만 실제로는 아직 아무것도 만들지 않았습니다.
두 도구를 모두 사용하고 각 라이브러리의 장단점에 대한 경험을 공유 하고이 시점에서 권장 사항을 공유하는 사람들의 의견을 듣고 싶습니다. :)