【发布时间】:2022-06-10 17:34:57
【问题描述】:
游戏场地包含一系列机器和设施
playArena :
guid : GUID
name : string
location: Location
owner: string
amenities: Amenities
playing_machines: PlayingMachines
Amenities is list of Amenity -> Array<Amenity>
PlayingMachines is list of PlayingMachine -> Array<PlayingMachine>
最初的用例可能不会填充太多可以分配的业务逻辑,但是随着应用程序使用和反馈的增加,将会有。我知道它违反了 YAGNI/KISS,但是预测在不久的将来会发生变化,尽管目前的用例可能感觉就像 CRUD 应用程序一样简单。
目前的基本用例是
- 游乐场应至少有 1 台机器,并且设施是可选的。
- 竞技场所有者可以更新竞技场、机器和设施。
- 所有者可以添加、更新或删除机器。
- 业主可以添加、更新或删除设施。
- 所有者可以更改竞技场的其他属性。
- **Play arena 有机器列表,一台机器可以属于多个 Play Arena。它的 m-n 关系 **
这些用例似乎没有太多业务逻辑,或多或少只是 CRUD。
我怎样才能仍然使用 DDD 并实施这些更改。 我应该允许直接使用他们自己的存储库添加、更新和删除机器和设施,还是将 arena 作为聚合根并仅通过 arena 存储库传递任何更改。
第二种情况:
假设只有机器被改变了,我们还需要打电话吗
arenaRepo.updated(arena) -> 并更新所有属性,即使只更改了机器。
第一种情况:
我可以调用getAllMachinesByArenaId():查看哪些是现有机器,哪些是新机器,并通过调用machineRepository.save(udpatedMachines).直接更新数据库(一种upsert操作)
【问题讨论】:
-
游乐场和游戏站有区别吗?
-
不,他们是一样的,已经更新了问题。
标签: domain-driven-design ddd-repositories aggregateroot