【问题标题】:How to design this domain model?如何设计这个领域模型?
【发布时间】:2013-04-02 17:47:17
【问题描述】:

所以我有以下域:

  • 应用程序和版本,它们实际上是软件应用程序
  • 设备,即安装应用程序的设备
  • 设备上已安装的应用程序
  • 已安装应用程序的通知订阅

到目前为止,我最终得到了以下模型:

  • Application实体,由名称、操作系统和类型定义
  • Version 值对象,它基本上包装了版本信息(主要、次要等)
  • Release 实体,它是一个组合对象,它引用一个应用程序实体并嵌入一个版本值对象
  • Device 实体,由序列号标识
  • NotitificationSubscription实体(允许我按属性查询)

现在我想知道如何“关联”Device 实体、ReleaseNotificationSubscription,因为它应该与 Device 上的“已安装”Release 关联并包含一些额外信息(像身份验证令牌)。

鉴于我的 ORM (Doctrine2) 和 RDMS (MySQL) 的限制,我一直在寻找一个好的设计。

想象一下以下工作流程:

  1. 我从由序列号标识的数据库中获取Device 实体
  2. 我确定运行DeviceRelease 是否已经与之关联,如果没有,我创建一个关联
  3. 然后我需要为当前的设备发布关联添加或删除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


    【解决方案1】:

    保持简单:这里不需要域模型,只需要一个好的实体关系模型。你可能也不需要 Doctrine,因为 sql 查询应该足够简单。

    【讨论】:

      猜你喜欢
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多