Doctrine 2(またはそれ以降)およびPropel 1.5(またはそれ以降)を使用したことがある人からの話を聞きたいです。これら2つのオブジェクトリレーショナルマッパーのほとんどの比較は古いバージョン(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名前空間を使用します
- 短所
- まったく新しいプログラミング言語(Doctrine Query Language)を学ぶ必要があります
- いくつかの場所で「マジックメソッド」の観点から実装されており、IDEのオートコンプリートは価値がありません。
- データベースのイントロスペクションが必要なため、デフォルトではPropelよりもわずかに遅くなります。キャッシングはこれを削除できますが、キャッシングはかなり複雑になります。
- コアコードベースに含まれる動作が少なくなります。Propelが提供するいくつかの機能(ネストされたセットなど)は、拡張機能を介してのみ使用できます。
- Freakin 'HUGE :)
- 長所
これは、両方のツールで利用可能なドキュメントを読むことによってのみ収集しましたが、実際にはまだ何も作成していません。
ただし、両方のツールを使用して、各ライブラリの長所/短所に関する経験を共有し、この時点での推奨事項を共有している人からの意見を聞きたいと思います。