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