8

我目前正在创建一个存储库,并且想知道实体的删除操作的“最佳实践”是什么。在下面的选项中,品牌和型号构成了 Car 实体的键。

选项1:

deleteCar(Car car)

选项 2:

deleteCar(String make, String model)

选项 3:

deleteCar(CarKey carKey)

起初我认为选项 1,但实际上选项 2 似乎更有吸引力(当我只有 id 时我不想获取一个对象,以便我可以将它传递给 delete 方法)。我之所以选择选项 3,是因为我见过类似的东西,但这对我来说似乎不正确,因为 CarKey 并不是一个真正的域对象。

想法?

4

2 回答 2

4

如果严格遵守DDD 中存储库的定义,那么选项 1 是可行的方法,因为存储库模拟内存集合的方式。但是,我不认为这是存储库的关键组成部分,如果做得太多,可能会导致抽象泄漏。另一方面,要求实体对象整体删除可能表明存储库的调用者(例如应用程序服务)应首先检索要通过 ID 删除的实体,解决任何业务问题,然后将其删除它。像 Hibernate 这样的 ORM 可以通过查询删除,因此您只需要 ID 即可调用删除,但最终还是会从数据库中加载实体。

于 2012-04-26T19:50:19.657 回答
4

选项 3。

CarKey 不是域对象(尽管它可以是值对象)并不重要,您需要一个 id 来执行该操作。这是因为,如果 Car 是 AR,存储库应该知道如何获取它以及如何处理删除。

于 2012-04-19T12:50:07.047 回答