This project is no longer maintained and has been archived.


はじめに

Doctrineは多くの人の作業の成果物です。他の言語のORMは開発者の学習のための主要なリソースです。

NOTE Doctrineは車輪の再発明をする代わりに他のオープンソースのプロジェクトからコードのピースも借りました。コードを借りた2つのプロジェクトは[http://www.symfony-project.com symfony]と[http://framework.zend.com Zend Framework]です。Doctrineのライセンス情報はLICENSEという名前のファイルで見つかります。


アーキテクチャ

Doctrineは3つのパッケージ: CORE、ORMとDBALに分割されます。下記のリストはそれぞれのパッケージを構成するメインクラスの一部のリストは下記の通りです。


Doctrine CORE


Doctrine DBAL

Doctrine DBALはドライバパッケージにも分割されます。


Doctrine ORM

その他のパッケージ。

Doctrine用のビヘイビアもあります:


デザインパターン

使用されているGoF (Gang of Four)デザインパターン:

使用されているエンタープライズアプリケーションデザインパターン:


動作速度

  • 遅延初期化 - コレクション要素
  • Subselectの取得 - Doctrineはsubselectを使用してコレクションを効率的に取得する方法を知っている。
  • 必要なときに、SQLステートメントの遅延実行 : 実際に必要になるまで接続はINSERTもしくはUPDATEを発行しません。ですので例外が起きてトランザクションを停止させる必要がある場合、一部のステートメントは実際に発行されることはありません。さらに、これによってデータベースのロック時間をできるかぎり短く保ちます(遅延UPDATEからトランザクションの終了まで)。
  • Joinの取得 - Doctrineはjoinとsubselectを使用して複雑なオブジェクトグラフを取得する方法を知っている
  • 複数のコレクション取得戦略 - Doctrineはパフォーマンスチューニングのための複数のコレクション取得戦略を持ちます。
  • 取得戦略の動的なミックス - 取得戦略は組み合わせ可能で例えばユーザーがバッチコレクションで取得可能である一方でユーザーの電話番号が1つのクエリのみを使用してオフセットコレクションでロードできます。
  • ドライバ固有の最適化 - Doctrineはmysqlのbulk-insertを知っています。
  • トランザクションの単発削除 - Doctrineは削除リストの追加オブジェクトのすべての主キーを集めテーブルごとに1つのdelete文のみを実行する方法を知っています。
  • 修正されたカラムのみを更新する - Doctrineはどのカラムが変更されたのか常に知っています。
  • 未修正オブジェクトを挿入/更新しない - Doctrineはレコードの状態が変更されたか知っています。
  • データベース抽象化のためのPDO - PDOはPHPの最速のデータベース抽象化レイヤーです。

まとめ

この章ではDoctrineのコンポーネントの完全な鳥瞰図と編成の情報を提供します。これまでこれらを個別の部分として見てきましたが3つのメインパッケージの個別のリストによってこれまでわからなかったことが明らかになります。

次に例外の扱い方を学ぶために[doc exceptions-and-warnings :name]の章に移動します。