所以我有以下域:
- 应用程序和版本,它们实际上是软件应用程序
- 设备,安装应用程序的设备
- 在设备上安装的应用程序
- 按已安装应用程序订阅通知
到目前为止,我最终得到了以下模型:
Application
实体,由名称、操作系统和类型定义Version
值对象,它基本上包装了版本信息(主要、次要等)Release
实体,它是一个组合对象,它引用了一个应用程序实体并嵌入了一个版本值对象Device
实体,由序列号标识NotitificationSubscription
实体(允许我按属性查询)
现在我想知道如何“关联”Device
实体,Release
因为NotificationSubscription
它应该与 a 上的“已安装”关联Release
并Device
包含一些额外信息(如身份验证令牌)。
鉴于我的 ORM (Doctrine2) 和 RDMS (MySQL) 的限制,我一直在寻找一个好的设计。
想象一下以下工作流程:
- 我
Device
从由其序列号标识的数据库中获取实体 - 我确定正在运行
Release
的Device
是否已经与它关联,如果没有,我创建一个关联 - 然后我需要
NotificationSubscription
为当前的设备发布关联添加或删除
我的问题是我最终有很多间接性。
为了允许我为关联设置额外的数据,我创建了一个关联类,它本身就是一个引用设备和发布的实体。
一个设备可能安装并运行了不同的 Release,例如,我不知道如何查询以下信息:“Fetches all the notification subscriptions for the current release for the current device”
我显然在存储库中添加了一个方法,findSubscriptionsByDeviceAndRelease($device, $release);
这意味着我可以通过使用存储库和图表来查询此信息$device->getInstalledReleases()->filter($identifiedRelease)->getNotificationSubscriptions();
有任何想法吗?