3

次のシナリオを検討してください

と の 2 つのエンティティを含む単純なデータベースがuserありcategoryます。
私たちの仮説では、usera は型のみを持つことができcategory、 aはncategoryに関連付けることができるとしましょう。 users

ここで、ユーザー テーブルを編集して別のテーブルに関連付けることができるWeb ページを考えてみましょuserう。 私が知る限り (そして私は一般的に symfony にはまだ慣れていません)、Doctrine と symfony2 をタンデムで使用すると、たとえば、アノテーション メソッドを使用すると、2 つのエンティティ (php クラス) が作成されます。ROLE_ADMINISTRATORcategory


埋め込みフォーム
を表示するフォームを作成します。表示のuserために - そしてもちろん永続化します! - また、彼categoryは「埋め込みフォーム」戦略に従うことを「選択」しました。
エンティティが作成されたと言ったので、フォームを作成する必要がありますcategory(の属性formBuilderのみを追加するとします)。 その後、以前のフォームを UserType クラスに追加する必要があり、「ある種の魔法」を使用すると、フォームは (適切な操作の後) 魔法としてレンダリングされ、魔法のようにレンダリングされます。など)すべての情報がデータベースに永続化されますidcategory
formBuilder

データ トランスフォーマー
は、フォームの入力をオブジェクトに、またはその逆に変換します。
そのようにして、私は定義する必要があります-たとえば-CategorySelectorType彼のビルダーに、それらの変換を行うクラス (サービス?) を追加します。次に、 (彼のメソッドなどを使用して)
を実装するデータ トランスフォーマー自体を定義します。次のステップでは、そのエンティティをサービスに登録し、このサービスを使用するフォームに 追加します。DataTransofmerInterface
UserType


したがって、これら2つの方法論の「強い」違いはわかりませんが、サービスの「再利用性」はわかりません。誰かが私に別の視点を提供し、違いを説明してくれませんか?

4

1 に答える 1

2

データ トランスフォーマーは埋め込みフォームを置き換えるのではなく、フォームを強化し、データ変換を適切にラップします。

Data Transformers に関する料理本のページの最初の文は、それをうまくまとめています。

ユーザーがフォームに入力したデータを、プログラムで使用するために別のものに変換する必要があることがよくあります。

上記の例では、管理者が特定のユーザーに対してカテゴリを選択できるように、カテゴリのドロップダウン リストを追加できます。これは、埋め込みフォームを使用して行われます。カテゴリ フィールドは既存のカテゴリの ID であるため、データを変換する必要はありません。

何らかの理由で、管理者がカテゴリの自由なテキストを入力できるようにしたいと考えています。ここで、テキストを問題のオブジェクトに変換する必要があります。このテキスト フィールドを使用して、新しいカテゴリを追加したり、現在のカテゴリを選択したりできるようにしたい場合があります。どちらも、テキストを取得してカテゴリを検索するデータ トランスフォーマーを使用することで可能になります。必要に応じて、既存のカテゴリを作成して返すことはできません。

もう 1 つの使用例は、保存する前に何らかの方法で変更する必要があるデータをユーザーが入力する場合です。ユーザーが通り、番地、市区町村を入力したが、代わりに座標を保存したいとします。

どちらの場合も、フォームを別のフォームに埋め込んでも問題ありません!

コントローラーでそれを行うことができますか?もちろん。コントローラーでそのようなことをするのは良い考えですか? テストするのに苦労するので(トランスフォーマーで実行すると、変換をうまくユニットテストできます)、または再利用するのに苦労するため、おそらくそうではありません。

アップデート

もちろん、変換コードを別の場所に配置することもできます。モデルは、変換を行うために必要なエンティティ マネージャーについて認識してはならないため、ユーザー オブジェクト自体は適切な場所ではありません。ユーザー タイプは可能ですが、これはエンティティ マネージャーに関連付けられることを意味します。

これらはすべて、懸念の分離という非常に強力な概念につながります。この概念では、1 つのクラスは、保守可能、再利用可能、テスト可能などにするために 1 つのことだけを行うべきであると述べています。この概念に従えば、データ変換はそれ自体が問題であり、そのように脅かされるべきであることは明らかです。気にしなければ、変換機能は必要ないかもしれません。

于 2012-07-03T08:42:58.603 に答える