だから私は次のドメインを持っています:
- アプリケーションとバージョン。実際にはソフトウェア アプリケーションです。
- デバイス、アプリケーションがインストールされているデバイス
- デバイスにインストールされたアプリケーション
- インストールされたアプリケーションによる通知サブスクリプション
これまでのところ、次のモデルになりました。
Application
名前、OS、タイプで定義されるエンティティVersion
基本的にバージョン情報 (メジャー、マイナーなど) をラップする値オブジェクトRelease
Application エンティティを参照し、Version 値オブジェクトを埋め込む合成オブジェクトです。Device
シリアル番号で識別されるエンティティNotitificationSubscription
エンティティ (属性でクエリできるようにするため)
今、Device
エンティティを「関連付ける」方法を疑問に思っています。これは、「インストール済み」に関連付けられ、追加情報(認証トークンなど)が含まれている必要があるためです。Release
NotificationSubscription
Release
Device
私の ORM (Doctrine2) と RDMS (MySQL) の制限を考えると、良いデザインを見つける方法に行き詰まっています。
次のワークフローを想像してください。
Device
シリアル番号で識別されるデータベースからエンティティを取得します- 実行元がすでに関連付けられているかどうかを判断し、関連付けられていない場合は関連付けを作成
Release
しますDevice
NotificationSubscription
次に、現在のデバイス リリースの関連付けを追加または削除する必要があります
私の問題は、私が多くの間接的になってしまうことです。
アソシエーションに追加のデータを設定できるようにするために、それ自体がデバイスとリリースの両方を参照するエンティティであるアソシエーション クラスを作成しました。
デバイスには異なるリリースがインストールされ、実行されている可能性があるため、たとえば、次の情報を照会する方法がわかりません:「現在のデバイスの現在のリリースのすべての通知サブスクリプションを取得します」
明らかにリポジトリにメソッドを追加しましたfindSubscriptionsByDeviceAndRelease($device, $release);
。つまり、リポジトリとグラフの両方を使用してこの情報を照会できます。$device->getInstalledReleases()->filter($identifiedRelease)->getNotificationSubscriptions();
何か案は?