You are currently reading the 1.2 documentation. Switch to 2.2  2.1  2.0 

Technology

はじめに

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

Doctrineは車輪の再発明をする代わりに他のオープンソースのプロジェクトからコードのピースも借りました。コードを借りた2つのプロジェクトはsymfonyZend Frameworkです。Doctrineのライセンス情報はLICENSEという名前のファイルで見つかります。

アーキテクチャ

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

Doctrine CORE

  • Doctrine
  • [doc component-overview:manager Doctrine_Manager]
  • [doc component-overview:connection Doctrine_Connection]
  • [doc improving-performance:compile Doctrine_Compiler]
  • Doctrine_Exception
  • Doctrine_Formatter
  • Doctrine_Object
  • Doctrine_Null
  • Doctrine_Event
  • Doctrine_Overloadable
  • Doctrine_Configurable
  • Doctrine_EventListener

Doctrine DBAL

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

Doctrine ORM

  • [doc component-overview:record Doctrine_Record]
  • [doc component-overview:table Doctrine_Table]
  • [doc defining-models:relationships Doctrine_Relation]
  • [doc component-overview:record:using-expression-values Doctrine_Expression]
  • Doctrine_Query
  • Doctrine_RawSql
  • [doc component-overview:collection Doctrine_Collection]
  • Doctrine_Tokenizer

その他のパッケージ。

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

  • [doc behaviors:core-behaviors:geographical :name]
  • [doc behaviors:core-behaviors:i18n :name]
  • [doc behaviors:core-behaviors:nestedset :name]
  • [doc behaviors:core-behaviors:searchable :name]
  • [doc behaviors:core-behaviors:sluggable :name]
  • [doc behaviors:core-behaviors:softdelete :name]
  • [doc behaviors:core-behaviors:timestampable :name]
  • [doc behaviors:core-behaviors:versionable :name]

デザインパターン

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

  • SingletonDoctrine_Managerのインスタンスを1つに強制するために
  • Composite、レベル付きの設定に
  • Factory、接続ドライバのロードとその他に
  • Observer、イベントのリスティング
  • Flyweight、バリデータの効率的な使い方
  • Iterator、コンポーネント(Tables、 Connections、Recordsなど)のイテレート用に
  • State、状態を認識する接続に
  • Strategy、アルゴリズム戦略に

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

  • Active Record, Doctrineはこのパターンを実装します
  • UnitOfWork、トランザクションに影響するオブジェクトのリストの維持に
  • Identity Field、レコードとデータベースの列のアイデンティティの維持に
  • Metadata Mapping、Doctrine DataDictに
  • Dependent Mapping, 一般的なマッピングに、Doctrine_Recordを継承するすべてのレコードがすべてのマッピングを実行するので
  • Foreign Key Mapping、一対一、一対多、多対多、多対一のリレーションに
  • Association Table Mapping、アソシエーションテーブルマッピング(多対多のリレーションに最も使われる)に
  • Lazy Load、オブジェクトとオブジェクトプロパティの遅延ロードに
  • Query Object、DQL APIはQuery Objectパターンの基本アイディアの拡張

動作速度

  • 遅延初期化 - コレクション要素
  • 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つのメインパッケージの個別のリストによってこれまでわからなかったことが明らかになります。

次に例外の扱い方を学ぶためにExceptions and Warningsの章に移動します。


Questions and Feedback

If you find a problem with the documentation or have a suggestion, please register and open a ticket.

If you need support or have a technical question, you can post to the user mailing-list.