存储库是否应通过传入id或实体本身来删除/删除实体

tes*_*123 8 domain-driven-design repository

我目前正在创建一个存储库,并想知道实体的删除操作的"最佳实践"是什么.在下面的选项中,make和model构成Car实体的键.

选项1:

deleteCar(Car car)
Run Code Online (Sandbox Code Playgroud)

选项2:

deleteCar(String make, String model)
Run Code Online (Sandbox Code Playgroud)

选项3:

deleteCar(CarKey carKey)
Run Code Online (Sandbox Code Playgroud)

起初我认为选项1,但在实践中选项2似乎更吸引人(我不想得到一个对象,当我只有id只是为了我可以将它传递给删除方法).我把选项3放在一边,因为我已经看过类似的东西,但这对我来说似乎不对,因为CarKey实际上并不是一个域对象.

思考?

Mik*_*eSW 4

选项 3。

CarKey 不是域对象(尽管它可以是值对象)并不重要,只要有一个 id 就可以让该操作发生。这是因为,如果汽车是 AR,存储库应该知道如何 GetIt 以及如何处理删除。