1

だから私は次のドメインを持っています:

  • アプリケーションとバージョン。実際にはソフトウェア アプリケーションです。
  • デバイス、アプリケーションがインストールされているデバイス
  • デバイスにインストールされたアプリケーション
  • インストールされたアプリケーションによる通知サブスクリプション

これまでのところ、次のモデルになりました。

  • Application名前、OS、タイプで定義されるエンティティ
  • Version基本的にバージョン情報 (メジャー、マイナーなど) をラップする値オブジェクト
  • ReleaseApplication エンティティを参照し、Version 値オブジェクトを埋め込む合成オブジェクトです。
  • Deviceシリアル番号で識別されるエンティティ
  • NotitificationSubscriptionエンティティ (属性でクエリできるようにするため)

今、Deviceエンティティを「関連付ける」方法を疑問に思っています。これは、「インストール済み」に関連付けられ、追加情報(認証トークンなど)が含まれている必要があるためです。ReleaseNotificationSubscriptionReleaseDevice

私の ORM (Doctrine2) と RDMS (MySQL) の制限を考えると、良いデザインを見つける方法に行き詰まっています。

次のワークフローを想像してください。

  1. Deviceシリアル番号で識別されるデータベースからエンティティを取得します
  2. 実行元がすでに関連付けられているかどうかを判断し、関連付けられていない場合は関連付けを作成ReleaseしますDevice
  3. NotificationSubscription次に、現在のデバイス リリースの関連付けを追加または削除する必要があります

私の問題は、私が多くの間接的になってしまうことです。

アソシエーションに追加のデータを設定できるようにするために、それ自体がデバイスとリリースの両方を参照するエンティティであるアソシエーション クラスを作成しました。

デバイスには異なるリリースがインストールされ、実行されている可能性があるため、たとえば、次の情報を照会する方法がわかりません:「現在のデバイスの現在のリリースのすべての通知サブスクリプションを取得します」

明らかにリポジトリにメソッドを追加しましたfindSubscriptionsByDeviceAndRelease($device, $release);。つまり、リポジトリとグラフの両方を使用してこの情報を照会できます。$device->getInstalledReleases()->filter($identifiedRelease)->getNotificationSubscriptions();

何か案は?

4

1 に答える 1

0

ここではドメイン モデルは必要ありません。適切なエンティティ関係モデルが必要なだけです。SQLクエリは十分に単純なはずなので、おそらくDoctrineも必要ありません。

于 2013-04-02T18:01:47.167 に答える