11

私はSymfonyフレームワークのORMとしてDoctrine2を使用しています。エンティティに注釈ベースのマッピングを使用すると、多くのコード(セッターとゲッター、マッピング情報など)を作成する必要があります。YAML / XMLを使用すると、列の定義とメタデータだけを記述する必要はありません。Doctrineのドキュメントでは、ほとんどの場合注釈を使用していますが、YAMLまたはXMLを使用しているものはほとんどありません。

YAML / XMLまたはアノテーションを使用する必要がありますか?

アノテーションについては、 http://docs.doctrine-project.org/en/latest/reference/annotations-reference.htmlですべてのアノテーションのドキュメントを見つけることができます。ただし、YAMLまたはXMLで注釈に相当するものは見つかりませんでした。注釈を同等のYAML/XML式に変換するにはどうすればよいですか?

4

3 に答える 3

21

これは基本的に好み次第です。

これは私の見解です:

注釈の長所:

  • それらが説明するもの(プロパティ)に近いため、操作が簡単です
  • あなたがすでに気づいたように、多くの例がそれらを使用しています

yaml/xmlの長所

  • これにより、ドメインオブジェクトがクリーンに保たれるため、永続層からドメインにリークするものはまったくありません(コメントの形式であっても)

dbまたはドメインを変更した場合でも、どちらの形式でも維持する必要があるため、その観点からは、どの方向にも実際の利点はありません。

パフォーマンスの観点から、本番環境では、Doctrineのキャッシングを使用してマッピングをキャッシュする必要があるため、ここでも同じです。

これに関して:「私はたくさんのコード、セッターとゲッター、マッピング情報を書かなければならないでしょう」:

Doctrineはプライベート/保護されたプロパティを必要とするので、あなたはまだゲッターとセッターを書いているでしょう。そして、あなたはまだ別の場所でマッピング情報を書いているでしょう。

個人的には、注釈を使用します。必要に応じて、例や情報を見つけるのがはるかに簡単だからです。

于 2012-09-21T09:57:22.393 に答える
20

注釈の使用には1つの欠点があります。それらはコメントで定義されているため(これは奇妙です)、プリコンパイラー(Zend Guardなど)や一部のバイトコードphpキャッシング拡張機能を使用してコードパフォーマンスを向上させることはできません(一部はコメントを削除します)。注釈はこの技術的な障害がある唯一の仕様であるため、使用することはお勧めしません。

また、コメントに「機能的な」ものを書くのは奇妙です。

XMLはYAMLよりもはるかに冗長ですが、より広く知られています。XMLのドキュメントの例は、すべてのオプションの中で最も貧弱です。

YAMLは他のどのYAMLよりも読みやすくなっていますが、スペースのインデントにも依存しています(一部の人は気に入らない)。Symfonyはデフォルトで設定にYAMLを使用するため、Symfonyを使用する多くの人は教義のマッピングにYAMLを使用することを選択します。つまり、YAMLの例は十分に文書化されており、そこには多くのリソースがあります。

私は個人的にYAMLが好きです。doctrineスキーマツールを使用してエンティティを自動的に生成できます(つまり、ゲッター/セッターを作成する必要はありません)。コメントが削除されることを心配せずに、プリコンパイラ/バイトコードキャッシュオプションを使用することもできます。


追加情報:

opcache.save_comments = 0PHP 7.0以降を使用している場合、アノテーションを使用しているとphp.iniに設定することはできません。PHPには、コメントを削除するネイティブの方法があります。これにより、アプリケーションが破損します。Doctrineの最もアクティブなメンテナの1人であり、ほとんどのプロジェクト(Doctrine、Symfony)で使用されるアノテーション検索クラスを開発したGuilherme Blancoは、コメントアノテーションに対して発言しました(スレッド全体を読むと、彼は非常に情熱的であることがわかりますこれについて)。Redditのコメント注釈に関する問題についても広範な議論があり、ほとんどの人はそれが悪い考えであることに同意しているようです。

それにもかかわらず、Symfonyの公式のベストプラクティスブックは、注釈を使用するように人々にアドバイスしています。したがって、ほとんどのSymfonyバンドルは、おそらくメタデータ形式として注釈を使用します。

于 2013-07-11T13:44:41.840 に答える
7

これは自分の好みの問題だと思います。注釈が好きです。

フィールドの上にあるフィールドについて何か知りたい場合は、新しいファイルを開いて必要なルールを検索する必要があるため、注釈を使用します。

両方のケースを作成するためにそれを理解するための最良の方法。次に、あなたはあなたの好みを見てください。

于 2012-09-21T09:51:43.217 に答える