2017-01-06 5 views
0

Symfonyのために様々なORMが実装すべきインターフェースがあるのだろうかと思います。SymfonyにORMのインターフェイスがありますか?

ORM(現在Doctrine)を受け入れている型を宣言したいサービスを構築していたときに質問が出ました。

違うORMの動作やクラスが違うと思います...そのような場合、特定のORMに依存しないエンティティを後で切り替えたい場合に、どのように作成できますか?

+1

SymfonyにはORMインターフェイスがありません。 Doctrine自体は異なるレイヤーを持ち、特にDoctrine \ Common \ Persistence \ ObjectManagerおよびObjectRepositoryインターフェースを持っています。これらの2つのインタフェースを実装しているORMは、理論的にはあまり変更することなくプラグインできます。私はそれを行う他のORMについて知らない。正直言って、ORMのようなものをスワップアウトできると期待するのはかなり非現実的です。あまりにも多くの微妙な違いが起きます。 – Cerad

答えて

5

一般に、SymfonyはあなたのORMの選択には無関心です。

standard editionにはDoctrineがバンドルされており、統合を容易にするための「ブリッジ」コードも含まれています。

ただし、任意のORMを使用できます。例えば、PropelはSymfonyでもうまく動作することが知られています。 Propelチームもintegration bundleを維持しています。

ORMが遵守しなければならない正式な記述という意味で「インターフェース」はありません。 interface SymfonyOrmInterface {}のようなものはありません。

Symfonyはこれをどうすれば必要とするのでしょうか。 Symfonyは、疎結合されたコンポーネントのセットで構築されたHTTPフレームワークです。これらのコンポーネントのほとんどは、ORMが何であるか、またはアプリケーションで現在利用可能であるかどうかを知りません。

通常、ORMはコンポーザーを使用してインストールします。ビジネスコードで使用できるようになります(PSR-0/-4でオートローディングをサポートしていると仮定します)。

  • CLIコマンド、例えば:

    もちろん、symfonyのORMへの適切な統合のために、のようないくつかの規則と特徴があり、

  • グローバルconfig.ymlファイルとparameters.ymlファイルによる構成値の管理
  • 依存性注入を使用したサービスと依存性の提供。

これらは、通常それぞれのORMベンダーが提供する統合バンドルで実装されています。

あなたのビジネスコードでは、ORMを別のORMに置き換えることはできません。ストレージ抽象化、キャッシング、クエリ、水分補給などに関しては、ORM全体で大きな違いがあります。ORMを置き換えると、ビジネスロジックを常にSymfonyプロジェクトだけでなく、一部のエクステントに適合させる必要があります。

+0

しかし、それらのORMが実装すべきインターフェイスはありますか? – JorgeeFG

+0

いいえ、Symfonyはそれを宣言しません。どのようにこのインターフェースを想像していますか?多くのORM上の別の抽象化レイヤーですか? http://softwareengineering.stackexchange.com/q/170619/257809 – Timurib

+0

@JorgeeFG:いいえ、ありません。私の更新を参照してください。 – lxg

関連する問題